home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1997 September / Macworld (1997-09).dmg / Serious Software / Cherwell Scientific Demos / pro Fit / pro Fit 5.0 demo (fpu).sea / pro Fit 5.0 demo (fpu) / External Modules / External modules sources / Pascal / proFit_interface.p < prev    next >
Text File  |  1996-05-19  |  127KB  |  4,158 lines

  1. {****************************************************************************** }
  2. {  proFit_interface.p                                                   }
  3. {*******************************************************************************}
  4. { History:                                                                    }
  5. {  24.03.96:    added SetTextFileFormat, changed SaveDataAsText }
  6. {  17.03.96:    added GetAndSetStatus }
  7. {  15.03.96:    added NumberToStr255, Str255ToNumber }
  8. {  10.03.96:    added GetFunctionParamName, CancelEvent }
  9. {  06.03.96:    fixed a bug where the wrong selector for StopExecution was used }
  10. {  29.02.95:    added WriteText, B5 and later                                  }
  11. {  21.02.95:    added SetWindowInfo, SetBoxTitle and InputBox for strings, B5 and later}
  12. {  30.12.95:    compatibility with MWerks 7 (68k+PPC) and ThinkPascal }
  13. {  15.12.95:    5.0 release                                            }
  14. {  27.01.95:    added conditionals for compatibility with                     }
  15. {            Metrowerks Pascal 68k/PPC and universal headers 2.0a3            }
  16. {  26.09.94:    4.2.0 release                                                                                                   }
  17. {*******************************************************************************}
  18.  
  19.  
  20.  
  21.  
  22. { Welcome to the pro Fit external modules!                                                                        }
  23. { ---------------------------------------                                                                    }
  24.  
  25. { External modules are pieces of code that you produce with your favorite compiler and that                }
  26. { you can build into pro Fit as functions or "user" programs.                                                    }
  27.  
  28. { If it is the first time you do something with external modules and you want to see what is                }
  29. { needed to implement them, just take a look at the example files.                                            }
  30.  
  31. { For example you might want to study the file ErrorFunc.p and look at the functions that are            }
  32. { defined there.                                                                                                    }
  33.  
  34. { Most function names are the same ones used for defining functions and programs                        }
  35. { within pro Fit.                                                                                                    }
  36. { To define your own external module, simply fill in these functions with your code.                        }
  37.  
  38. { Have a look at the pro Fit user manual for details on the parameter lists of these                        }
  39. { functions.                                                                                                        }
  40.  
  41. { In order to build an external function or program, you must compile and link the                            }
  42. { following files:                                                                                                    }
  43.  
  44. {      proFit_interface.p            ("glue" code standing between pro Fit and your procedures)                }
  45. {      XXXXXX.p                        (your procedures, where XXXXXX is a name you define)                    }
  46.  
  47. { Of course you can add other files if you need them (such as the SANE library and interface).            }
  48. { Also, depending on the compiler you use, you may have to add additional                                    }
  49. { modules containing call glues for system traps (for example, in Think Pascal you must add             }
  50. { Interface.lib and DRVRRuntime.lib to your project).                                                            }
  51.  
  52. { When compiling this file under Metrowerks Pascal, you need CodeWarrior 5 or later                    }
  53. { with the universal interfaces version 2.0                                                                    }
  54.  
  55. { Compiling instructions for Power Macintosh (PowerPC):                                            }
  56. { -----------------------------------------------------                                        }
  57.  
  58. { Compile your files as a "shared libary" or, more accurately, as an "application                        }
  59. { extension". The code should reside in the data fork (not a resource) and it should                        }
  60. { export the function main() as it is defined in the template files provided.                            }
  61. { The type of the file you create must be 'ftCD', its creator must be 'NLft'.                        }
  62.  
  63.  
  64. { Compiling instructions for 68XXX:                                                            }
  65. { ---------------------------------                                                            }
  66.  
  67. { Compile your files and link them in a single resource of type 'NLft' (the ID number                        }
  68. { can be any number >128 you like). Make sure that your code consists of a single segment.                        }
  69. { Refer to your compiler's manual if you don't know how to compile code for a resource.                        }
  70. { Put your resource into a file having the type 'ftCD' and the creator 'NLft'.                        }
  71.  
  72. { Before compiling, make sure that you choose the compiler options that are compatible                        }
  73. { with the version of pro Fit you use:                        }
  74.  
  75. { If you use the FPU version of pro Fit, make sure that your extended variables are 12                        }
  76. { bytes longint. In Think Pascal, check "68020/68030" and "68881/68882"                                 }
  77. { under Compile Options.                                                                    }
  78.  
  79. { If you use the non-FPU version of pro Fit, make sure that your extended variables are                        }
  80. { 10 bytes longint. In Think Pascal, uncheck  "68020/68030" and "68881/68882"                        }
  81. { under Compile Options.                                                                        }
  82.  
  83. { The external module is a compiled code resource that provides a procedure called 'main'.                        }
  84. { You must make sure that main is at the beginning of your code. Under Symantec's                        }
  85. { compilers, this is done automatically. Under MPW, you must make sure that main()                        }
  86. { is the first routine that is compiled and linked.                                            }
  87.  
  88. { ***************************************************************************************            }
  89.  
  90.  
  91. unit proFit_interface;
  92.  
  93. interface
  94.  
  95.  
  96. {     ****************************************************************************************                        }
  97.  
  98. {     The following are the type definitions that serve as an interface between the                        }
  99. {     external module and pro Fit. These declarations describe exactly how pro Fit                        }
  100. {     expects the external module to arrange the information it provides, and how the                        }
  101. {     information provided by pro Fit is arranged.                                                    }
  102. {     Don't even think of changing something in this file. The informations it contains                        }
  103. {     are vital to the external module in their present, original form. They are deadly if                        }
  104. {     you modify them.                        }
  105. {     ANY change in a type definition (e.g. changing the ranges of an array or the                            }
  106. {     order of the fields in a record) is guaranteed to cause very ugly consequences.                        }
  107. {                                                                                     }
  108. {     For a detailed description of these declarations and their use, see the                        }
  109. {     pro Fit user manual.                                                                }
  110. {                                                                                     }
  111.  
  112.  
  113. {$IFC UNDEFINED POWERPC}
  114.     { if this is not defined, we assume that this is a 68k compiler             }
  115.     {$SETC POWERPC := false            }
  116. {$ENDC}
  117.  
  118. {$IFC UNDEFINED THINK_PASCAL }
  119.     { if this is the think pascal compiler}
  120.     { then we don't need any "uses" at all}
  121.     {$IFC UNDEFINED UsingIncludes}
  122.         {$SETC UsingIncludes := 0}
  123.     {$ENDC}
  124.  
  125.         {$IFC NOT POWERPC}
  126.     uses
  127.         Types, TextUtils, Files, Files,QuickDraw, Events;
  128.         {$ELSEC}
  129.     uses
  130.         Types, TextUtils, MixedMode, Files, Quickdraw, Events;
  131.         {$ENDC}
  132.  
  133. {$ENDC}
  134.  
  135. {$IFC UNDEFINED __CONDITIONALMACROS__}
  136.     { __CONDITIONALMACROS__ would be defined in ConditionalMacros.p of the universal headers version 2 or later. }
  137.     { if it is not defined, we assume that this is a 68k compiler: }
  138.     {$SETC GENERATINGPOWERPC := false}
  139.     {$SETC GENERATING68K := true}
  140. {$ENDC}
  141.  
  142. {$IFC NOT UNDEFINED MWERKS AND GENERATING68K}
  143.     function SetCurrentA4: longint;
  144.         C;
  145.     external;
  146.     function SetA4 (newA4: longint): longint;
  147.     external;
  148.     {$SETC SET_A4 := true}
  149. {$ENDC}
  150.  
  151.  
  152.  
  153.     const
  154.         versionNumber = 1;            { the version number of this implementation             }
  155.  
  156.  
  157.         isFunction = 1;                { constants used in the procedure Setup to set the parameter moduleKind            }
  158.         isProgram = 2;
  159.         isMacro = 3;
  160.  
  161.         drawingType = 'ftGF';            { window types, used by DoNewWindow, etc. }
  162.         dataType = 'ftLS';
  163.         textType = 'ftFC';
  164.         defaultType = '****';
  165.  
  166.         gaussDistr = 1;                { error distributions, used for setting the parameters of the SetFitDefaults routine  }
  167.         doubleExpDistr = 2;
  168.         lorentzDistr = 3;
  169.         andrewDistr = 4;
  170.         tukeyDistr = 5;
  171.  
  172.         defaultFormat = 0;            { Drawing window file formats }
  173.         pictFormat = 1;
  174.         epsFormat = 2;
  175.  
  176.         floatColumn = 0;            { data column types         }
  177.         doubleColumn = 1;
  178.         textColumn = 128;
  179.  
  180.         noErrors = 0;    {error bar types, used for setting the "errors" parameter in the OpenDataSet routine}
  181.         eBarY = 1;
  182.         eBarX = 2;
  183.         asymmEBarY = 4;
  184.         asymmEBarX = 8;
  185.  
  186.         xAxis = 0;    { constants used for the routines accessing the current x or y axis, such as "SetRange"}
  187.         yAxis = 1; { used to distinguish between Y and X axes.                }
  188.  
  189.         equalToMain = 1;    { constants used for setting the "flags" field of the SetAxisAttributes routine        }
  190.         drawAxisLine = 2;
  191.         drawTicks = 4;
  192.         drawMajorTickLabels = 8;
  193.         drawMinorTickLabels = $00000010;
  194.         plusSideTicks = $00000020;
  195.         minusSideTicks = $00000040;
  196.         plusSideLabels = $00000080;
  197.         labelsOutsideFrame = $00000100;
  198.  
  199.         drawFrame = 2;    { constants used for setting the "flags" field in calls to the SetGraphAttributes routine             }
  200.         drawMajorGridX = 4;
  201.         drawMinorGridX = 8;
  202.         drawMajorGridY = $00000010;
  203.         drawMinorGridY = $00000020;
  204.         plotBehindAxes = $00000040;
  205.         gridInFront = $00000080;
  206.         gridInMiddle = $00000100;
  207.  
  208.         maxNrParams = 64;            { the maximum number of parameters used by a function }
  209.         maxParamNameLength = 31;        { the maximum length of a parameter name }
  210.  
  211.         maxNrInputValues = 6;        { the maxiumum number of input values in the input dialog box             }
  212.  
  213.     type
  214.  
  215. {$ALIGN MAC68K}
  216. { ************Type definition for the "InputBox" ************ }
  217.         ExtendedPtr = ^extended;
  218.         inputRec = packed array[1..maxNrInputValues] of record    { information type for the input dialog box             }
  219.                 x: ExtendedPtr;
  220.                 s: ^str255;
  221.             end;
  222.  
  223.  
  224. { ************ type definitions for "GetDefaultData" ************** }
  225.  
  226.         DataInfo = record          { this data structure can be used when calling GetDefaultData.                }
  227.  
  228.                 xMin, xMax, xPosMin, xNegMax: extended;    { set if the "x" array was calculated                    }
  229.                 yMin, yMax, yPosMin, yNegMax: extended;    { set if the "y" array was calculated                    }
  230.  
  231.                 ordered,                { true if the x-array is ordered such that x[i+1]>=x[i], for all i.                    }
  232.  
  233.                 zeroYErrors,            { true if at least one y-error is 0                    }
  234.                 invalidYErrors,            { true if at least one y-error is invalid or 0                    }
  235.                 zeroXErrors,            { true if at least one x-error is 0                    }
  236.                 invalidXErrors: boolean;    { true if at least one x-error is invalid or 0                    }
  237.             end;
  238.         DataInfoPtr = ^DataInfo;
  239.  
  240.         ExtendedArray = array[0..0] of extended; { Variable size array of native double numbers. }
  241.         ExtendedArrayPtr = ^ExtendedArray;         { GetDefaultData: Index [0] is reserved. First valid index is [1].}
  242.         ExtendedArrayHandle = ^ExtendedArrayPtr;  { Handle to an array of native extended numbers }
  243.         ExtendedArrayHandlePtr = ^ExtendedArrayHandle;
  244.  
  245.         LongArray = array[0..0] of longint;    { variable size array of longint numbers}
  246.         LongArrayPtr = ^LongArray;            { GetDefaultData: Index [0] is reserved. First valid index is [1].}
  247.         LongArrayHandle = ^LongArrayPtr;        { Handle to an array of longint numbers }
  248.         LongArrayHandlePtr = ^LongArrayHandle;
  249.  
  250.  
  251. { ************ type definitions for "GetColHandle/SetColHandle" ************** }
  252.         StringData = record                { the data structure of a column of strings. Warning: this data structure may change in future releases of pro Fit    }
  253.                 size: longint;                { the size of valid data in this handle     }
  254.                 nrRows: longint;                { the number of rows in this handle     }
  255.                 firstOffset: longint;            { reserved     }
  256.                 firstRow: integer;            { reserved     }
  257.                 data: Str255;                { here follow the strings, packed, one after another }
  258.             end;
  259.  
  260.  
  261.  
  262.  
  263.         checkPAnswer = (update, good, bad);                { the possible return values of the 'check' function, only used when the external module is a function             }
  264.  
  265.         ModeType = (active, inactive, constant);            { the fitting state of a parameter, used to set variables of type ParamMode            }
  266.         ParamName = string[maxParamNameLength];
  267.  
  268.         ParamArray = array[1..maxNrParams] of extended;        { the numerical values of the parameters             }
  269.         ParamNameArray = array[1..maxNrParams] of ParamName;    { the names of the parameters }
  270.         ParamModeArray = array[1..maxNrParams] of ModeType;    { the fitting modes of the parameters, {active, inactive, constant)  }
  271.  
  272.  
  273.         DefaultParamInfo = record
  274.                 value: ^ParamArray;                { the default value of the parameters as they appear in params window             }
  275.                 lowest: ^ParamArray;                { the lowest allowed value (for fitting)             }
  276.                 highest: ^ParamArray;                { the highest allowed value (for fitting)             }
  277.                 mode: ^ParamModeArray;            { the fitting mode of the parameters             }
  278.                 name: ^ParamNameArray;            { the names             }
  279.             end;
  280.  
  281.         DefaultParamInfoPtr = ^DefaultParamInfo;
  282.  
  283.         GlobalArrayType = array[0..99] of extended;
  284.         GlobalArrayPtr = ^GlobalArrayType;
  285.         GlobalArrayHandle = ^GlobalArrayPtr;
  286.  
  287.         GlobalScratch = record
  288.                 globalScratch1: longint;                { free for use in external modules             }
  289.                 globalScratch2: longint;                { free for use in external modules             }
  290.                 globalDataSize: longint;                { the number of entries in the following array             }
  291.                 globalData: GlobalArrayHandle;            { array of extendeds to be accessed by external and interal programs             }
  292.             end;
  293.  
  294.         GlobalScratchPtr = ^GlobalScratch;
  295.  
  296. {$ALIGN RESET}
  297.  
  298.  
  299. { ******************************************************************************************* }
  300. { ************************* parameter block for external modules **************************** }
  301.  
  302. { The following is interface information that defines the communication between                            }
  303. { an External Module and pro Fit. This information is used in the implementation part                            }
  304. { to provide the code that implements all of the predifined routines made                            }
  305. { available by pro Fit.                                                                    }
  306.  
  307. { Normally, you will just want to leave this information untouched in its present form    }
  308. { and to never have a look at it.                                                }
  309.  
  310.  
  311. {                             ************************                            }
  312.  
  313.  
  314. { You need the folloing information if you want to program a very advanced                            }
  315. { external module, and if you want to do more exotic things.                                    }
  316.  
  317. { All the interaction between pro Fit and the external module takes place through the procedure main.                            }
  318. { pro Fit calls it with different values of its parameter 'selector' and the                            }
  319. { function main must return the information requested by setting the necessary fields                            }
  320. { inside a parameterBlock.                                                                }
  321.  
  322. { When it first opens the external module, pro Fit calls main with the selector equal to zero, and                            }
  323. { main must provide the specifications of the code supplied, such as the settings                            }
  324. { with which the code was compiled, if the code is a function or a program, the name of the                            }
  325. { external module, etc.                                                                        }
  326.  
  327. { Depending on the response it obtains after calling the external module with selector 0, pro Fit                            }
  328. { then calls it with the selector that tells the module to initialize some parameters. This is                            }
  329. { very simple for programs, but there are a few more things to be set for functions.                            }
  330.  
  331. { After the module is added to pro Fit's menus pro Fit calls it with the selector                            }
  332. { identifying the action needed and pro Fit will expect the external module to react accordingly.                            }
  333. { For programs, pro Fit calls the external module with only one selector, the one identifying                            }
  334. { the function run().                                                                        }
  335. { For functions, pro Fit calls the external module with a range of selectors, identifying the                            }
  336. { functions check, first, last, and so on. If you do not want to define such functionality, simply                            }
  337. { leave these function empty.                                                                        }
  338.  
  339. { See the files FunctionTemplate.p and ProgramTemplate.p                                    }
  340. {                                        }
  341. { *****************************************************************************************                            }
  342.  
  343.  
  344.  
  345. {     The following record is used as a parameterBlock when pro Fit calls an external module.                            }
  346. {     The external module must provide a function main(selector:integer; pb: ExtModulesParamBlockPtr).                            }
  347. {     When pro Fit interacts with the external module, it calls main with various values of the                             }
  348. {     first parameter. Depending on the value of selector the function main must give the                            }
  349. {     right response, i.e act as the function first, or calculate the y-value or your                            }
  350. {     functions, and so on. The parameterblock contains all the information you will ever need                            }
  351. {     to do this.                                                                            }
  352.  
  353. {     The template files for functions and programs provide a predifined function main that                 }
  354. {    performes all the necessary calls, with the right parameters, to a set of functions                     }
  355. {    called, as you might expect, first, check, derivatives, run, etc.                                 }
  356. {    These functions correspond exactly to the functions you                                        }
  357. {     define when defining functions and programs within pro Fit.                                        }
  358.  
  359. {     All you need to do is fill them in according to your needes.                            }
  360.  
  361. {     Unless you want to produce some advanced, exotic functionality in your external module, you                            }
  362. {     do not need to access the parameter block directly.                                            }
  363. {     WARNING: the definition of ExtModulesParamBlock may change in future versions                             }
  364. {     of pro Fit. Using it from within your function may cause compatibility problems                             }
  365. {     with those future versions.                            }
  366.  
  367.     const
  368. {constants used to set the fields in the ExtModulesParamBlock defined below             }
  369.         CPU68noFPU = 1;                {constants for codeType            }
  370.         CPU68FPU = 2;
  371.         CPUPowerPC = 3;
  372.  
  373.         kSetup = 0;                    {constants for selector            }
  374.         progInitialize = 11;
  375.         progRun = 12;
  376.         funcInitialize = 21;
  377.         funcCheck = 22;
  378.         funcFirst = 23;
  379.         funcFunc = 24;
  380.         funcDerivatives = 25;
  381.         funcLast = 26;
  382.         kCleanUp = 31;
  383.  
  384.     type
  385.  
  386. {$ALIGN MAC68K}
  387.         ExtModulesParamBlock = record  {parameter block used for the communication to and from proFit            }
  388.  
  389.                 RunTimeProcPtr: Ptr;    {    call back routine for proFit            }
  390.                         {    the external module uses this bottleneck to call all routines             }
  391.                         {    provided by proFit             }
  392.                 globals: Ptr;        {     global variable space (defined if selector>0) and if requiredGlobals was set >0 in SetUp. }
  393.  
  394.     { parameters to be set when selector=ksetup             }
  395.                 versionNumber: integer;        { the present implementation             }
  396.                 moduleKind: integer;            { isFunction, isProgram, isMacro             }
  397.                 codeType: integer;            { CPU68noFPU=1, CPU68FPU, CPUPowerPC             }
  398.                 name: Str255;                { the name of your external module             }
  399.                 requiredGlobals: longint;        { global memory required. If this is >0 proFit will allocate the             }
  400.                                 { required memory for you and return a pointer to it in the pointer             }
  401.                                 { globals. Do not touch the pointer value. proFit is responsible             }
  402.                                 { for allocating AND deallocating it.             }
  403.  
  404.  
  405.     { general info provided by proFit             }
  406.                 v: array[1..30] of extended;    { an array for general purpose your use in the external module             }
  407.  
  408. { the following entries can only be used by when the external module is a function.             }
  409. { they can be accessed only when selector>0 and when             }
  410. { moduleKind==isFunction. moduleKind must be set when the external module             }
  411. { is called for the first time (with selector==0)             }
  412.  
  413.     { parameters to be set by funcInitialize             }
  414.                 dummy: Boolean;                 { unused             }
  415.                 hasDerivatives: Boolean;        { true if proFit must call the function "Derivatives" defined in your module }
  416.                                 { You can set this paramter to true, and only calculate a few derivatives (dyda[] values) }
  417.                                 { in your "Derivatives" function. pro Fit will take care of calculating the rest numerically. }
  418.                                 { If you set this hasDerivatives to true and leave your definition of "Derivatives" empty, then }
  419.                                 { you have the same result obtained when setting hasDerivatives to false: proFit calculates all }
  420.                                 { derivatives numerically. }
  421.                 descr1, descr2: Str255;        { description to appear in parameters window             }
  422.                 numberOfParams: integer;        { number of parameters used by the function             }
  423.                 a0: DefaultParamInfo;            { all parameter default settings             }
  424.  
  425.     { parameters used in check:             }
  426.                 paramNo: integer;            { current parm number, for check (0..maxNrParams-1)     }
  427.                 answer: integer;                { return value of check, type CheckPAnswer             }
  428.  
  429.     { parameters used in func and in derivatives             }
  430.                 x, y: ^extended;                    { x- and y-value             }
  431.                 a: ^ParamArray;                    { parameter values, set to a0.value before calling first             }
  432.                 dyda: ^ParamArray;                { used by derivatives, set to the derivatives of the function with respect to its parameters.}
  433.                                     { If a dyda[] value is not set, pro Fit calculates that derivative numerically.}
  434.                 globalScratch: GlobalScratchPtr;    { global data to be acessed by all modules             }
  435.                 moduleFile: FSSpec;                { the file where this external module is in             }
  436.             end;
  437.  
  438.         ExtModulesParamBlockPtr = ^ExtModulesParamBlock;
  439.         ExtModulesParamBlockH = ^ExtModulesParamBlockPtr;
  440.  
  441.  
  442. {$ALIGN RESET}
  443.  
  444.  
  445.  
  446. {*****************************************************************************************            }
  447. {*****************************************************************************************            }
  448. {*****************************************************************************************            }
  449.  
  450. {              Declarations of all routines provided by pro Fit.                                }
  451. {                                                                                     }
  452. { For an explaination of the meaning of the various parameters and the return values see                 }
  453. { the pro Fit user manual .                                                                 }
  454.  
  455.  
  456.  
  457. {******************************************************************************            }
  458. {********************************* input/output *******************************            }
  459.  
  460.     function InputBox (nrArgs: integer; var r: inputRec): boolean;
  461. { Shows a dialog box with nrArgs (between 1 and 6=maxNrInputValues) input values }
  462. { r contains a title and a numeric field for every argument }
  463. { The default way to display an input value is an numberic edit field with a title }
  464. { If the title 'ttt' starts with a '$' other interface elements are displayed: }
  465. { - '$Wttt' shows a popup menu to select a data window }
  466. { - '$Cttt' shows a popup menu to select a column }
  467. { - '$Pmmm$ttt' shows a user defined popup menu 'mmm' (each entry separated by a ';') }
  468. { - '$Xttt' shows a check box }
  469. { - '$Sttt' shows an edit field to input a string }
  470. { returns true if stop, false otherwise }
  471.  
  472.     function AlertBox (s: str255): boolean;
  473. { shows an alert box with message s and two buttons (OK,  STOP)             }
  474. { returns true if stop, false if ok             }
  475.  
  476.     procedure SetBoxTitle(title: Str255);
  477. { Sets the title of the dialog box in the next call to InputBox. }
  478. { By default, this box does not have a title. }
  479.  
  480.     function AskBox (var answer: integer; s: str255): boolean;
  481. { shows alert box with message s and three buttons (YES, NO, STOP)             }
  482. { returns true if stop, else false             }
  483. { if not stop, answer = 0 for no and 1 for yes             }
  484.  
  485.     procedure WriteString (s: Str255);
  486. { writes s into the results window             }
  487.  
  488.     procedure WritelnString (s: Str255);
  489. { writes s into the results window and goes to a new line             }
  490.  
  491.     procedure WriteText (length: longint; theText: Ptr);
  492. { writes a text to the results window. the pointer theText points to the first }
  493. { character of the text. "length" must give the length of the text            }
  494.  
  495.     procedure WriteInt (i: longint);
  496. { writes an integer value to the results window             }
  497.  
  498.     procedure WriteNumber (d: extended);
  499. { writes a floating point value to the results window             }
  500.  
  501.     procedure NumberToStr255(x: extended; var s: Str255; format, digits:integer);
  502. { converts the number x into a string }
  503. { format/digits: controls the conversion process. }
  504. {    format = 0:         normal conversion }
  505. {                    if digits>0: the number of digits after the '.', }
  506. {                    if digits<0: the total number of digits (approx.) }
  507. {  format = 1:        optimized conversion, removes unnecessary trailing zeros after }
  508. {                    the decimal point, leading spaces, unecessary '+'-signs, etc }
  509. {                    digits: the number of digits }
  510.  
  511.     function Str255ToNumber(s: Str255; var x: extended):integer;
  512. { converts string s to a number x. s can be a numeric string or an expression }
  513. { return values: }
  514. {    0:        conversion successful }
  515. {    1:        x is infinite }
  516. {    2:        s is empty }
  517. {    3:        x is an NAN (invalid number) }
  518. {    4:        user aborted calculation }
  519. {    5:        run time error }
  520.  
  521.  
  522. {******************************************************************************            }
  523. {*********   redirecting text to the results window or to text files **********            }
  524.  
  525.  
  526.     function CreateTextFile (fileName: Str255): longint;
  527.  
  528. {        creates a text file with the given name and returns a                                    }
  529. {        reference number used to identify this file.                        }
  530. {        Call the routine WriteToTextFile() to redirect the                        }
  531. {        output from calls to write/writln/writenumber into this file.                        }
  532.  
  533.  
  534.     procedure CloseTextFile (fileRefNumber: longint);
  535.  
  536. {        Closes the text file with the given reference number.                         }
  537. {        The calls to write/writln/writenumber is redirected back to                        }
  538. {        the results window.                        }
  539.  
  540.  
  541.     procedure WriteToTextFile (fileRefNumber: longint);
  542.  
  543. {        redirects the output of the pro Fit "write/writeln/writenumber"                        }
  544. {        routines to the given text file.                        }
  545. {                                 }
  546. {        call this routine with fileRefNumber==0 to direct the text                        }
  547. {        writing routines back to the results window.                        }
  548.  
  549.  
  550.  
  551.  
  552. {******************************************************************************                        }
  553. {*************** window and document management routines **********************                        }
  554.  
  555.     function GetFrontWindow: longint;
  556.  
  557. {        Returns the identification number of the frontmost window                        }
  558.  
  559.  
  560.     procedure DoNewWindow (windowType: OSType);
  561.  
  562. {        creates a new window. windowType can take one of the following values:                        }
  563. {            drawingType:    create a drawing window                        }
  564. {            dataType:        create a data window                        }
  565. {            textType        create a text window                        }
  566.  
  567.  
  568.     procedure SetCurrentWindow (windowID: longint);
  569.  
  570. {        makes the window with the given ID number the current window to                        }
  571. {        be used for data, plotting, writing, etc, depending on its type.                        }
  572.  
  573.  
  574.     function GetCurrentWindow (windowType: OSType): longint;
  575.  
  576. {        returns the ID number of the current window of the given type                        }
  577. {        windowType can take one of the following values                        }
  578. {            drawingType:    return the current drawing window                        }
  579. {            dataType:        return the current data window                        }
  580. {            textType        return the current text window                        }
  581.  
  582.  
  583.     procedure DoCloseWindow (windowID: longint; saveIt: Boolean);
  584.  
  585. {        closes the window with the given ID number.                        }
  586. {        saves the contents of the window if saveIt is true                        }
  587.  
  588.  
  589.     function FrontmostWindow (windowType: OSType): longint;
  590.  
  591. {        returns the ID number of the front most window with the given type                        }
  592. {            drawingType:    return the frontmost drawing window                        }
  593. {            dataType:        return the frontmost data window                        }
  594. {            textType        return the frontmost text window                        }
  595.  
  596.  
  597.     procedure SaveWindow (windowID: longint);
  598.  
  599. {        saves the contents of the given window in the file associated with it                        }
  600.  
  601.  
  602.     procedure SaveWindowAs (windowID: longint; fileName: Str255);
  603.  
  604. {        saves the contents of the given window in the file.                        }
  605. {        fileName: the files name. If fileName does not contain a file path, the file                        }
  606. {            is expected to reside in the same folder as pro Fit. Alternatively, you                        }
  607. {            can specify a file path, such as "\pHD:MyFolder:My File".                        }
  608. {            if fileName is an empty string, the window is saved in a file having the name of the window                        }
  609. {            if fileName is '?', a dialog box is brought up to ask for user for a name                        }
  610.  
  611.  
  612.     function GetWindowID (windowName: Str255): longint;
  613.  
  614. {        returns the ID number of the window with the given name.                        }
  615. {        returns 0 if no such window is found.                        }
  616.  
  617.  
  618.     function GetWindowType (windowID: longint): OSType;
  619.  
  620. {        returns the type of the window with the given ID number                        }
  621. {        returns 0 if the given window is not a text, drawing or data window                        }
  622. {                  or if there is no window exists with the given ID number                        }
  623.  
  624.  
  625.     function NextWindow (windowID: longint): longint;
  626.  
  627. {        returns the ID number of the window immediately behind the given window                        }
  628. {        returns 0 if the given window is the last one                        }
  629. {        returns the front window if 0 is passed for the windowID.                        }
  630. {        returns 0 and causes run-time error if the windowID it receives is invalid                        }
  631.  
  632.  
  633.     procedure OpenFile (fileName: Str255);
  634.  
  635. {        Opens the given file in a new window.                        }
  636. {        fileName: the files name. If fileName does not contain a file path, the file                        }
  637. {        is expected to reside in the same folder as pro Fit. Alternatively, you                        }
  638. {        can specify a file path, such as "\pHD:MyFolder:My File".                        }
  639. {        Set name to '?' for bringing up a dialog box prompting the user for the name.                        }
  640. {        A run-time error occurs if the file cannot be opened.                        }
  641.  
  642.  
  643.     procedure OpenData (fileName: Str255);
  644.  
  645. {        Opens the given file as a data file. The file must either be a pro Fit data                        }
  646. {        file or a text file with valid data.                        }
  647. {        fileName: the files name. If fileName does not contain a file path, the file                        }
  648. {        is expected to reside in the same folder as pro Fit. Alternatively, you                        }
  649. {        can specify a file path, such as "\pHD:MyFolder:My File".                        }
  650. {        Set name to '?' for bringing up a dialog box prompting the user for the name.                        }
  651. {        A run-time error occurs if the file cannot be opened.                        }
  652.  
  653.  
  654.     procedure OpenText (fileName: Str255);
  655.  
  656. {        Opens the given file as a text file. The file must either be a pro Fit function                        }
  657. {        file or a text file.                        }
  658. {        fileName: the files name. If fileName does not contain a file path, the file                        }
  659. {        is expected to reside in the same folder as pro Fit. Alternatively, you                        }
  660. {        can specify a file path, such as "\pHD:MyFolder:My File".                        }
  661. {        Set name to '?' for bringing up a dialog box prompting the user for the name.                        }
  662. {        A run-time error occurs if the file cannot be opened.                        }
  663.  
  664.  
  665.     procedure SetTextFileFormat (colDelimiter, endOfLine: Str255; withColTitles, copyInfoText: Boolean; nrHeaderLines, inputORoutput: longint);
  666.  
  667. {        colDelimiter:    inserted between consecutive cells in the same row.                        }
  668. {                        Usually, you will specify a tab character by passing "\p\t"                        }
  669. {        endOfLine:        inserted between the last cell of a row and the first cell                        }
  670. {                        of a next row. Usually, you will specify the CR character                        }
  671. {                        by passing "\p\15"                        }
  672. {        withColTitles:    pass true if the column titles should be saved / loaded                            }
  673. {                        as the (first) row of the file.            }
  674. {        copyInfoText:    pass true if the text in the info field of the data window                        }
  675. {                        shall be saved / loaded.                }
  676. {        nrHeaderLines:    number of header lines contained in the text file when loading.                    }
  677. {                        If copyInfoText is true, these lines are copied to the info                        }
  678. {                        field, otherwise they are skipped.        }
  679. {        inputORoutput:    pass 1 to define the format of the input file (loading),                        }
  680. {                        pass 0 to define the format of the output file (saving).    }
  681.  
  682.  
  683.     procedure SaveDataAsText (windowID: longint; fileName: Str255);
  684.  
  685. {        saves the contents of the data window in a file.                        }
  686. {        fileName: the file's name. If fileName does not contain a file path, the file                        }
  687. {            is expected to reside in the same folder as pro Fit. Alternatively, you                        }
  688. {            can specify a file path, such as "\pHD:MyFolder:My File".                        }
  689. {            if fileName is an empty string, the window is saved in a file having the name of the window                        }
  690. {            if fileName is '?', a dialog box is brought up to ask for user for a name                        }
  691. {        The individual cells will be stored row by row.                        }
  692.  
  693.  
  694.     procedure SaveDrawingAs (windowID: longint; fileName: Str255; format: longint);
  695.  
  696. {        saves the contents of the drawing window in a file.                        }
  697. {        fileName: the file's name. If fileName does not contain a file path, the file                        }
  698. {            is expected to reside in the same folder as pro Fit. Alternatively, you                        }
  699. {            can specify a file path, such as "\pHD:MyFolder:My File".                        }
  700. {            if fileName is an empty string, the window is saved in a file having the name of the window                        }
  701. {            if fileName is '?', a dialog box is brought up to ask for user for a name                        }
  702. {        format:    0 for saving the file in a standard pro Fit drawing file                        }
  703. {                1 for saving the file as picture (having a file type PICT)                        }
  704. {                2 for saving the fiel as eps-file (having a file type EPSF)                        }
  705.  
  706.  
  707.     procedure SetWindowTitle (windowID: longint; name: Str255);
  708.  
  709. {        sets the title of a given window. The title should not contain a ':'                        }
  710.  
  711.  
  712.     procedure GetWindowTitle (windowID: longint; var name: Str255);
  713.  
  714. {        returns the title of the window with the given windowID                        }
  715.  
  716.  
  717.     procedure SetWindowInfo(windowID:longint; length: longint; info: Ptr);
  718. {        Sets the info of a window. (The "info" of a window can be viewed by using the }
  719. {        Get Info... command from the File menu. For data windows, it is the }
  720. {        text that appears when you drag down the info field.) }
  721. {        windowID: the id of the window }
  722. {        length: the length of the text in bytes }
  723. {        info: a pointer to the start of the text }
  724. {        Use SetWindow(windowID, 0, nil) for clearing the info field. }
  725.  
  726.  
  727.     procedure PlaceWindow (windowID: longint; windowRect: Rect);
  728.  
  729. {        resizes and positions the window according to windowRect                        }
  730.  
  731.  
  732.  
  733.     procedure BringWindowToFront (windowID: longint);
  734.  
  735. {        the window with the given ID number is brought in front of all others.                        }
  736.  
  737.  
  738.     procedure Compile (windowID: longint);
  739.  
  740. {        Compiles the text found in the given window.                        }
  741. {        Causes a run error if the given window is not a function window or if                        }
  742. {        the text is not compiled successfully.                        }
  743.  
  744.  
  745.  
  746.  
  747. {******************************************************************************                        }
  748. {************************* drawing and plotting *******************************                        }
  749.  
  750.  
  751.     procedure OpenCurve (curveName: Str255);
  752.  
  753. {        Starts a new function curve definition in the current graph. After this call,                        }
  754. {        all moveto/lineto calls will generate lines in the current graph.                        }
  755. {        The function curve will use the current style/color, set by SetLineStyle/SetLineColor                        }
  756. {        curveName is the name that will appear in the legend (pascal string).                        }
  757. {        Call CloseCurve once you are finished.                        }
  758.  
  759. {        This function replaces the obsolete "NewCurve" function, used in earlier versions                        }
  760. {                                }
  761.  
  762.  
  763.     procedure CloseCurve;
  764.  
  765. {        Matches the "OpenCurve" call. Stops collecting moveto/lineto calls                        }
  766. {        as a definition of a function curve in the current graph.                        }
  767. {        Call once you are finished defining a curve in the current graph.                        }
  768.  
  769.  
  770.  
  771.     procedure OpenDataSet (errors: integer; connected: Boolean; datasetName: Str255);
  772.  
  773. {        Starts a new data set definition in the current graph. After this call,                        }
  774. {        all DrawDataPoint calls will generate data points in the current graph.                        }
  775. {        AddDataPoint is also used for the same purposes, if you want to add error                        }
  776. {        bars to the data point.                        }
  777. {        The data set will use the current style/color, set by SetLineStyle/SetLineColor                        }
  778. {        datasetName is the name that will appear in the legend.                        }
  779. {        Call CloseDataSet once you are finished.                        }
  780. {        errors:        used to specify if the new data set will use error bars or not.                        }
  781. {                    pass 0 if you don't plan to use error bars,                        }
  782. {                    pass a sum of eBarY, eBarX, asymmEBarY, asymmEBarX to specify which                        }
  783. {                    kind of error bars you will use.                        }
  784. {        connect:    set to true if you want a line to coonnectthe data points.                        }
  785. {                                }
  786. {        Example                        }
  787. {            "eBarY+asymmEBarX" tells proFit that it has to allocate space for                        }
  788. {            holding the value of the y error bar and the two values corresponding                        }
  789. {            to the left and right part of an x error bar.                        }
  790. {            When you then call AddDataPoint, the parameters yErr, xErr, and xErr1                        }
  791. {            will be interpreted by proFit.                        }
  792. {                                }
  793. {        This function replaces the obsolete "NewDataSet" function, used in earlier versions                        }
  794.  
  795.  
  796.  
  797.  
  798.     procedure CloseDataSet;
  799.  
  800. {        Matches the "OpenDataSet" call. Stops collecting AddDataPoint/DrawDataPoint calls                        }
  801. {        as a definition of a data set in the current graph.                        }
  802.  
  803.  
  804.     procedure SetCurveFill (whichAxis: integer; axisID: integer);
  805.  
  806. {        switches on the filling style for curves that will be created in the current                        }
  807. {        graph using the OpenDataSet and OpenCurve functions.                        }
  808. {        the parameters to this routine specify the axis towards which the filling is                        }
  809. {        applied. use axisID==0 to swich off filling.                        }
  810. {        Specify the filling color using the "SetFillColor" routine.                        }
  811.  
  812.  
  813.     procedure SetEBarStyle (caplength, capThick, lineThick: extended);
  814.  
  815. {        sets the default error bar style used for producing error bars in the next                        }
  816. {        data set created in the current graph using the OpenDataSet call                        }
  817.  
  818.  
  819.     procedure AddDataPoint (x, y, xErr, yErr, xErr1, yErr1: extended);
  820.  
  821. {        Adds a data point at the given coordinates and with the given error to the                        }
  822. {        current data set in the current graph.                        }
  823. {        The error-parameters are interpreted in the way specified by setting the                        }
  824. {        "errors" parameter in the NewDataSet call.                        }
  825.  
  826. {        If you don't use error bars you can call the "DrawDataPoint" routine instead of AddDataPoint                        }
  827.  
  828.  
  829.     procedure GrMoveto (x, y: extended);
  830.  
  831. { Moves the pen to position x,y of the current graph without drawing anything                         }
  832. { x,y are in coordinates of the current graph                         }
  833.  
  834.     procedure GrLineto (x, y: extended);
  835. { Draws a line between the current pen position and position x,y of the current graph                         }
  836. { x,y are in coordinates of the current graph                         }
  837.  
  838.     procedure GrMove (x, y: extended);
  839.     {                         }
  840. {        add x, y to the current point.                        }
  841.  
  842.  
  843.     procedure GrLine (x, y: extended);
  844.     {                         }
  845. {        add a line starting from current point                        }
  846.  
  847.  
  848.  
  849.     procedure GetGraphCoordinates (var xmin, xmax, ymin, ymax: extended);
  850. { Returns the minimum and maximum x- and y-coordinates of the current graph in                         }
  851. { the variables xmin, xmax, ymin, and ymax                         }
  852.  
  853.     procedure CreateNewGraf (xmin, xmax, ymin, ymax: extended; xScaling, yScaling: integer);
  854. { creates a new , empty graf with the given ranges produces a run - time error                        }
  855. {if no drawing window is available or if the ranges are inconsistent                         }
  856. {    xScaling/yScaling     = 0    : linear                                }
  857. {                            = 1    : log                                }
  858. {                            = 2    : 1/x                                }
  859. {                            = 3    : probability                                }
  860.  
  861.     procedure SetLineStyle (thick: extended; dash: integer);
  862.  
  863. {        Sets the default line style that will be used for drawing and plotting.                        }
  864. {        thick:    the thickness of the line in points,                        }
  865. {        dash:    the dash pattern, given by the item number in the dash popup menu                        }
  866.  
  867.  
  868.     procedure SetFillPattern (pattern: integer);
  869.  
  870. {        Sets the default fill pattern.                        }
  871. {        pattern:    the fill pattern, given by the item number in the corresponding popup menu                        }
  872.  
  873.  
  874.     procedure SetArrowStyle (arrowLocation: integer; style: integer; size: extended);
  875.  
  876. {        Sets the default arrow style.                        }
  877. {        You can define different arrows for line start and line end.                        }
  878. {        arrowLocation:    1: at start, 2: at end, 3: both start and end                        }
  879. {        style:            0: no arrow, 1..12: the item number in the arrow popup menu.                        }
  880. {        size:            the size of the arrow in points, as it would appear in the custom arrow dialog box.                        }
  881.  
  882.  
  883.     procedure SetTextStyle (fontName: Str255; size: extended; style: integer);
  884.  
  885. {        Sets the default text style.                        }
  886. {        supply a font name, its size, and style.                        }
  887. {        size and style are the same parameters you can pass to the MacOS routines "TextSize" and "TextFace"                        }
  888.  
  889.  
  890.     procedure SetNewGraphRect (left, top, right, bottom: extended);
  891.  
  892. {        Sets the default rectangle used for creating new graphs in the drawing window.                        }
  893.  
  894.  
  895.     procedure SetDataPointStyle (style: integer; size: extended; thickness: extended);
  896.  
  897. {        Sets the default data point style.                        }
  898. {        style gives the item number in the data points popup menu                        }
  899. {        style:    0:pixel, 1-13: row number in data pont menu, 14-17: points in the last row, second column                        }
  900. {                -1..-8: the 8 custom points in the separate section                        }
  901. {        size:    the size of the point in points, same as the one which is given in the custom data point symbols dialog box.                        }
  902. {        thickness:    the line thickness used to draw empty data point symbols.                        }
  903.  
  904.  
  905.     procedure SetBGDataPointStyle (style: integer; size: extended);
  906.  
  907. {        Can be used in conjunction with SetDataPointStyle to set the default data pont style.                        }
  908. {        Substitutes the background symbol of the current data point style with the one                        }
  909. {        given.                        }
  910. {        supply a font name, its size, and style.                        }
  911. {        size and style are the same parameters you can pass to the MacOS routines "TextSize" and "TextFace"                        }
  912.  
  913.  
  914.  
  915.     procedure SetLineColor (red, green, blue: longint);
  916.  
  917. {        Sets the default line color, used for lines and text.                        }
  918. {        red, green, blue give the RGB value of the color (0<red,green,blue<65536)                        }
  919.  
  920.  
  921.     procedure SetFillColor (red, green, blue: longint);
  922.  
  923. {        Sets the default fill color, used to fill drawing shapes or for curves in plots.                        }
  924. {        red, green, blue give the RGB value of the color (0<red,green,blue<65536)                        }
  925.  
  926.  
  927.     procedure DrawRect (left, top, right, bottom: extended);
  928.  
  929. {        Creates a rectangle with the given coordinates in the current drawing window                        }
  930.  
  931.  
  932.     procedure DrawEllipse (left, top, right, bottom: extended);
  933.  
  934. {        Creates an ellipse with the given coordinates in the current drawing window                        }
  935.  
  936.  
  937.     procedure DrawLine (start_h, start_v, end_h, end_v: extended);
  938.  
  939. {        Creates a line with the given coordinates in the current drawing window                        }
  940.  
  941.  
  942.     procedure DrawTextLine (theString: Str255; theAngle: extended; docenter: Boolean);
  943.  
  944. {        Creates a text-label at the given coordinates in the current drawing window                        }
  945. {        with the given rotation angle.                        }
  946. {        rotation is around center if docenter is true.                        }
  947.  
  948.  
  949.     procedure DrawNumber (theNum: extended; decs: integer; theAngle: extended; docenter: Boolean);
  950.  
  951. {        Converts the number into a text with the given number of decimals; and                        }
  952. {        creates a text-label at the given coordinates in the current drawing window;                        }
  953. {        with the given rotation angle.                        }
  954. {        rotation is around center if docenter is true.                        }
  955.  
  956.  
  957.     procedure DrawDataPoint (x, y: extended);
  958.  
  959. {        Draws a data point symbol at the coordinates given, using the current             }
  960. {        data point style.            }
  961. {        if OpenDataSet was called, then it creates a data point in the current plot,            }
  962. {        adding it to the current data set.            }
  963. {                }
  964.  
  965.     procedure DrawPICT (left, top, right, bottom: extended; thePict: PicHandle);
  966.  
  967. {        Creates a new picture in the current drawing window using the             }
  968. {        MacOS PicHandle "thePict".                        }
  969. {        Once you call this routine, the handle thePict BECOMES PROPERTY         }
  970. {        of pro Fit — DO NOT DISPOSE IT!                        }
  971. {        left and top give the coordinates of the picture.            }
  972. {        right and bottom are used to define the size of the picture if they are larger            }
  973. {        than left and top, respectively.            }
  974. {        Otherwise the size information containd in the PicHandle passed you pass is used.            }
  975. {                }
  976.  
  977.     procedure GetLastClickedCoordinates (var x, y: extended);
  978.  
  979. {        returns the screen-coordinates that were last clicked by the user            }
  980. {                }
  981.  
  982.  
  983.     procedure DisableDrawingUpdates;
  984.  
  985. {        Inhibits updates in the current drawing window until your program is finished.            }
  986. {        Call this if you are drawing lots of stuff and you want to do it as fast as            }
  987. {        possible.            }
  988. {                }
  989.  
  990.     procedure OpenPolygon (smoothing: integer; kind: integer);
  991.  
  992. {        Opens a new polygon definition, which can then be defined by moveto/lineto calls.            }
  993. {        smoothing:    gives the kind of smoothing which is applied to the polygon, use            }
  994. {                    0 for no smoothing.            }
  995. {        kind:        0 for a normal polygon, 1 for a closed polygon.            }
  996. {                }
  997.  
  998.     procedure ClosePolygon;
  999.  
  1000. {        Stops collecting data for a polygon definition, and creates the resulting            }
  1001. {        polyon in the current drawing window.            }
  1002. {                }
  1003.  
  1004.  
  1005.     procedure GroupBegin;
  1006.     procedure GroupEnd;
  1007.  
  1008. {        Starts/ends the definition of a group. All drawing taking place after this call            }
  1009. {        will be part of a group.             }
  1010. {        Call GroupEnd when you are finished with the drawing that belongs to this group.            }
  1011. {                }
  1012.  
  1013.  
  1014.     procedure SetCurrentGraph (graphID: longint);
  1015.  
  1016. {        Sets the current graph, that is the graph that will be used for all newly            }
  1017. {        created function-curves and data-sets, and by all routines that access the            }
  1018. {        current graph in general, such as the axes-editing routines.            }
  1019. {        graphID is the graph's identificatioin number, which can be found immediately            }
  1020. {        after a graph is created by using the routine GetCurrentGraph.            }
  1021. {                }
  1022.  
  1023.     function GetCurrentGraph: longint;
  1024.     {                }
  1025. {        returns the graph identification number of the current graph.            }
  1026. {                }
  1027.  
  1028.  
  1029.     function GetNextGraph (graphID: longint): longint;
  1030.  
  1031. {        returns the identification number of the graph following the given one in            }
  1032. {        pro Fit's private list of existing graphs. The order in this list is not            }
  1033. {        defined and depends on the order of the windows containing the graphs.            }
  1034. {        use graphID=0 to get the ID of the first graph.            }
  1035. {        returns 0 if graphID identifies the last graph, or if graphID!=0 and no graph             }
  1036. {        with this identification number exists.            }
  1037. {                }
  1038.  
  1039.     procedure GetGraphFrame (var left, top, right, bottom: extended);
  1040.  
  1041. {        returns the coordinates of the frame of the current graph.            }
  1042. {                }
  1043.  
  1044.     procedure SetGraphFrame (left, top, right, bottom: extended);
  1045.  
  1046. {        changes the frame of the current grapha to match the given coordinates.            }
  1047. {                }
  1048.  
  1049.  
  1050.  
  1051.     function GetCurrentAxis (whichAxis: integer): integer;
  1052.  
  1053. {        returns the number of the current x or y axis.            }
  1054. {        whichAxis is either xAxis (==0) or yAxis (==1).            }
  1055. {                }
  1056.  
  1057.     procedure SetCurrentAxis (whichAxis: integer; axisID: integer);
  1058.  
  1059. {        sets the current axis that will be used for the next data set or curve, and            }
  1060. {        for all axis-editing calls, such as SetRange, SetAxisPosition, etc.            }
  1061. {                }
  1062.  
  1063.     procedure DeleteAxis (whichAxis: integer; axisID: integer);
  1064.  
  1065. {        deletes the given axis in the current graph.            }
  1066. {                }
  1067.  
  1068.     procedure MakeNewAxis (whichAxis: integer; min, max: extended; scaling: integer; position: extended);
  1069.  
  1070. {        creates a new axis with the given range and scaling in the current graph.            }
  1071. {        position gives the position of the new axis in the coordinate system of the            }
  1072. {        MAIN AXIS perpendicular to it.            }
  1073. {                }
  1074.  
  1075.     procedure SetRange (whichAxis: integer; min, max: extended; scaling: integer);
  1076.  
  1077. {        Changes the range and scaling of the current axis to the specified one.            }
  1078. {        (the current axis can be set with the SetCurrentAxis routine)            }
  1079. {                }
  1080.  
  1081.     procedure MakeTicks (whichAxis: integer; firstMaj, distance: extended; nrMinTicks: integer);
  1082.  
  1083. {        Lets the current axis recalculate its ticks, based on the new position            }
  1084. {        of the first major tick, tick distance, and number of minor ticks.            }
  1085. {                }
  1086.  
  1087.     procedure SetLabelsFormat (whichAxis: integer; format: integer; decimals: integer);
  1088.  
  1089. {        Changes the format of the tick labels of the current axis.            }
  1090. {        format:        -1: auto, 0: decimal, 1: auto exponent.            }
  1091. {                    any other number gives the fixed exponent            }
  1092. {        decimals:    number of digits after the decimal point.            }
  1093. {                }
  1094.  
  1095.     procedure ClearLabels (whichAxis: integer);
  1096.  
  1097. {        Clears the text contained in all labels of the current axis.            }
  1098. {                }
  1099.  
  1100.     procedure ClearTicks (whichAxis: integer);
  1101.  
  1102. {        Clears the ticks list of the current axis, effectively creating            }
  1103. {        an empty list of ticks.            }
  1104. {        Call this routine before defining a set of custom ticks with the            }
  1105. {        AddTick routine.            }
  1106. {                }
  1107.  
  1108.  
  1109.     function AddTick (whichAxis: integer; tickPos: extended; isMajor: Boolean): integer;
  1110.  
  1111. {        Use this routine to define your own ticks in the current axis.            }
  1112. {        Call ClearTicks before using this routine.            }
  1113. {        given the position of the tic mark and its properties (set isMajor to true            }
  1114. {        to obtain a major tick), AddTick returns the index of the newly created            }
  1115. {        tick in the tick list.            }
  1116. {        It returns 1 for the first tick.            }
  1117. {        This index can be used in the SetLabel/SetLabelText routines to change            }
  1118. {        the label attached to the newly created tick.            }
  1119. {                }
  1120.  
  1121.     procedure SetLabel (whichAxis: integer; tickNum: integer; labelNumber: extended);
  1122.  
  1123. {        Given a tick index (1<=tickNum<=numberOfTicks), this routine attaches the            }
  1124. {        given label to it by converting labelNumber into a string according to            }
  1125. {        the label-format specified for the current axis.            }
  1126. {        labels can be attached to minor or major ticks in the same way.            }
  1127. {                }
  1128.  
  1129.     procedure SetLabelText (whichAxis: integer; tickNum: integer; labelText: Str255);
  1130.  
  1131. {        Given a tick index (1<=tickNum<=numberOfTicks), this routine attaches the            }
  1132. {        given label to it by using the text passed in labelText (pascal string!)            }
  1133.  
  1134. {                }
  1135.  
  1136.     procedure SetAxisPosition (whichAxis: integer; position: extended);
  1137.  
  1138. {        Sets the position of the current axis in the coordinate system of the            }
  1139. {        MAIN AXIS perpendicular to it.            }
  1140. {                }
  1141.  
  1142.  
  1143.     procedure SetAxisAttributes (whichAxis: integer; flags: longint);
  1144.  
  1145. {        sets the attributes of the current axis to match "flags"            }
  1146. {        flags:    a set of axis characteristics that can be calculated by summing the            }
  1147. {                available constants.            }
  1148. {                }
  1149.  
  1150.  
  1151.     procedure SetGraphAttributes (flags: longint);
  1152.  
  1153. {        sets the attributes of the current axis to match "flags"            }
  1154. {        flags:    a set of axis characteristics that can be calculated by summing the             }
  1155. {                available constants.            }
  1156. {                }
  1157.  
  1158.  
  1159.  
  1160.  
  1161.  
  1162. {******************************************************************************            }
  1163. {**************** interaction with other functions and programs ****************            }
  1164.  
  1165.  
  1166.     procedure SetParamLimits (paramNum: integer; low, high: extended);
  1167. { sets the limits of a parameter (of the currently running function)             }
  1168.  
  1169.     procedure SetParamDefaultValue (paramNum: integer; value: extended);
  1170. { sets the name of a parameter (of the currently running function)             }
  1171.  
  1172.     procedure SetParamName (paramNum: integer; s: str255);
  1173. { sets the name of a parameter ( of the currently running function )             }
  1174.  
  1175.     procedure SetParamDefaults (paramNum: integer; value: extended; mode: modeType; name: Str255; low, high: extended);
  1176. { sets the default settings of a parameter (of the currently running function)             }
  1177. { mode is (active, inactive, constant)             }
  1178.  
  1179.  
  1180.     function CallFunction (name: Str255; xvalue: extended): extended;
  1181. { calls any of the functions in the func menu by its name             }
  1182.  
  1183.     function GetNumFunctionParams (functionName: Str255): integer;
  1184. { returns the number of parameters of a function in the func menu             }
  1185.  
  1186.     function GetFunctionParamMode (functionName: Str255; paramIndex: integer): modeType;
  1187. { returns the mode of a parameter of a function in the func menu             }
  1188.  
  1189.     procedure GetFunctionParamName(functionName: Str255; paramIndex: integer; var paramName: Str255);
  1190. { returns the name of a parameter for one of the functions in the func menu }
  1191.  
  1192.     function GetFunctionParam (functionName: Str255; paramIndex: integer): extended;
  1193. { returns the parameter of a function in the func menu             }
  1194.  
  1195.     procedure SetFunctionParam (functionName: Str255; paramIndex: integer; value: extended);
  1196. { sets the parameter of a function in the func menu             }
  1197.  
  1198.     procedure CallProgram (name: Str255);
  1199. { calls a program from the User menu             }
  1200.  
  1201. {******************************************************************************            }
  1202. {***************************** numerical analysis *****************************            }
  1203.  
  1204.     function Integral (functionName: Str255; xmin, xmax: extended; numIters: integer): extended;
  1205. { calculates the integral of a function in the func menu             }
  1206.  
  1207.     function Maximum (functionName: Str255; xmin, xmax: extended): extended;
  1208. { finds the maximum of a function in the func menu             }
  1209.  
  1210.     function Minimum (functionName: Str255; xmin, xmax: extended): extended;
  1211. { finds the minimum of a function in the func menu             }
  1212.  
  1213.     function Root (functionName: Str255; xmin, xmax: extended): extended;
  1214. { finds the root of a function in the func menu             }
  1215.     function Derivative (functionName: Str255; x, scale: extended): extended;
  1216. { finds the root of a function in the func menu             }
  1217. { at the ascissa value x. scale is a typical scale over which the function changes.            }
  1218. { This number is not necessarily small!            }
  1219.  
  1220.     procedure Fit (functionName: Str255; xCol, yCol, errCol: longint; errVal: extended; selectionOnly: Boolean);
  1221. { runs a non-linear fit for the given function. Generates a run-time             }
  1222. { error if fit did not converge.             }
  1223. { xCol, yCol: the x- and y-columns             }
  1224. { errCol: the error column. Set to 0 if using no error or a constant / percentual error             }
  1225. { errVal:    if > 0: a constant error   if < 0 (-100..-0) a percentual error             }
  1226. { selectionOnly: set to true if only selected rows should be fitted             }
  1227.  
  1228.     function ChiSquared: extended;
  1229. { returns the chi - squared of the last successful fit . Produces a run - time error            }
  1230. { if no fit information from a successful fit is available             }
  1231.  
  1232.     function NumFitParams: integer;
  1233. {  returns the number of parameters of the last successful fit             }
  1234. {( ALL parameters , active , inactive , and constant returns 0            }
  1235. {if no fit information from a successful fit is available              }
  1236.  
  1237.     function FittedParams (paramNum: integer): extended;
  1238. {returns the fitted value of a parameter . Produces a run - time error            }
  1239. {if no fit information from a successful fit is available             }
  1240.  
  1241.     function ParamSD (paramNum: integer): extended;
  1242. {returns the standard deviation of a parameter after a successful fit .            }
  1243. { returns NAN ( Not A Number , an invalid real number )if no standard deviation             }
  1244. {is available . Produces a run - time error if no fit information from a successful fit             }
  1245. {is available              }
  1246.  
  1247.     function CovarMatrix (paramNum1, paramNum2: integer): extended;
  1248. {returns the elements of the covariance matrix after a successful fit .             }
  1249. {returns NAN if the corresponding element is not defined because the parameter             }
  1250. {was not used for the fit . Produces a run - time error if no fit information from a             }
  1251. {successful fit is available             }
  1252.  
  1253.     function PRandom: extended;
  1254. { Returns a random number between 0 and 1             }
  1255.  
  1256.  
  1257.     function NumberInvalid (aNum: extended): boolean;
  1258. { returns true if the argument is not a good number             }
  1259. { returns false if the argument is a normal, reasonable number             }
  1260.  
  1261.  
  1262.     function Erf (x: extended): extended;
  1263.     {                }
  1264. {        returns the error function defined as            }
  1265. {                 x            }
  1266. {          2      /            }
  1267. {        ------   |  exp(-t*t) dt            }
  1268. {          √π     /            }
  1269. {                 0            }
  1270. {        The definition is such that Erf(-inf) = -1, Erf(inf) = 1            }
  1271. {                }
  1272.  
  1273.     function Erfc (x: extended): extended;
  1274.     {                }
  1275. {        returns the complementary error function defined as 1-erf(x)            }
  1276. {                }
  1277.  
  1278.     function PErf( x: extended): extended;
  1279. { same as Erf but with alternative name: erf() is also defined in fp.p - use PErf() to avoid conflicts }
  1280.     function PErfc( x: extended): extended;
  1281. { same as Erfc but with alternative name: erfc() is also defined in fp.p - use PErfc() to avoid conflicts }
  1282.  
  1283.  
  1284.     procedure SetFitDefaults (algorithm: integer;        { algorithm to be used for fitting             }
  1285.                                     yErrDistribution: integer;     { y error distribution: gaussDistr, extendedExpDistr, lorentzDistr, andrewDistr, tukeyDistr             }
  1286.                                     xErrDistribution: integer;    { x error distribution: gaussDistr, extendedExpDistr, lorentzDistr, andrewDistr, tukeyDistr             }
  1287.                                     xErrColumn: longint;    { x error column: >0:column number, 0:none, -1:constant, -2:percent             }
  1288.                                     xErrValue: extended;            { x error value if constant (xErrColumn=-1) or percentage (xErrColumn=-2)             }
  1289.                                     stopTime: extended);            { criterium to stop monte carlo fits, does not stop if 0             }
  1290.                                                     { interpreted as seconds if negativ and as iterations if positive             }
  1291.  
  1292. {        Sets the error column and type, the algorithm and the stopping creteria            }
  1293. {        to be used in all subsequent calls to Fit(..)            }
  1294. {                }
  1295.  
  1296.     function Maximize (theFunction: Str255;            { the function name in the func menu             }
  1297.                                     precision: extended;                { relative tolerance of function values calculated in the simplex             }
  1298.                                             { algorithm, used as convergence criterium             }
  1299.                                     varyX: Boolean;                    { true, if the x-values should be varied, too             }
  1300.                                     var x, y: extended): Boolean;        { on input: fixed x-value, or starting x-value if varyX is true             }
  1301.                                             { returned x-value of maximum found             }
  1302.                                             { returned y-value of maximum found             }
  1303.  
  1304. {         Varies the parameters of the function (and x if varyX is true) until            }
  1305. {         the function value reaches a maximum. It is a procedure comparable to            }
  1306. {         fitting. The algorithm used is the Simplex method.             }
  1307.  
  1308.  
  1309.     function Minimize (theFunction: Str255; precision: extended; varyX: Boolean; var x, y: extended): Boolean;
  1310.  
  1311. {         See the comment for "Maximize", which works in the same way.             }
  1312.  
  1313.  
  1314.     procedure SetErrorAnalysis (confidence: extended;    { confidence interval in % (set to 0 to disable error analyis)             }
  1315.                                     iterations: longint);                { number of iterations (set to 0 to disable error analyis)             }
  1316.  
  1317. {         Sets the options for error analysis to be used in the next call to Fit(..)             }
  1318.  
  1319.  
  1320.     procedure ConfidenceInterval (i: integer; var min, max: extended);
  1321.  
  1322. {        returns in min,max the confidence interval for parameter i, as calculated after            }
  1323. {        the last fit by the error analysis algorithm.            }
  1324.  
  1325. {        Note that this routine does not return meaningful results if the confidence            }
  1326. {        interval for a given value was not determined, e.g. because this parameter            }
  1327. {        was not active during a fit.            }
  1328.  
  1329.  
  1330.  
  1331.     function CalcStat (column: longint;                { column number             }
  1332.                                     selRowsOnly: Boolean;         { set to true to use only the selected rows             }
  1333.                                     withBasics: Boolean;         { calculate basic information             }
  1334.                                     withSkewAndCurt: Boolean;     { calculate skewness and curtosis             }
  1335.                                     withMedian: Boolean): Boolean;        { calculate median             }
  1336.  
  1337. {        returns false if an error occurred, true if ok            }
  1338. {         set "column" to:  0 to include all columns.            }
  1339. {                         -1 to use the current selection            }
  1340. {        set the Boolean parameters corresponding to the information you            }
  1341. {        want to calculate.            }
  1342. {                    }
  1343. {        You will use GetBasics, GetSkew, GetMedian to retrieve this information            }
  1344. {                }
  1345.  
  1346.     procedure GetBasics (var count: longint;             { number of data processed             }
  1347.                                     var sum,             { sum of all these data                 }
  1348.                                     mean,             { their average                        }
  1349.                                     variance,        { variance = (stdDev)^2                }
  1350.                                     stdDev,            { the standard deviation                }
  1351.                                     meanAbsDev: extended);    { mean absolute deviation                 }
  1352.  
  1353. {        returns some results of the last statistics evaluation            }
  1354. {        CalcStat must have been called with the withBasics parameter            }
  1355. {        set to true before this function can be used.            }
  1356. {                }
  1357.  
  1358.     procedure GetSkewAndKurt (var count: longint;         { number of data processed             }
  1359.                                     var mean,         { 1st moment of distribution: average             }
  1360.                                             { measure the average value of a distribution             }
  1361.                                     variance,    { 2nd moment of distribution: variance             }
  1362.                                             { the square of the standard deviation             }
  1363.                                     skewness,     { 3d moment of distribution: skewness             }
  1364.                                             { characterizes the asymmetry of a distribution around its mean             }
  1365.                                     kurtosis: extended);    { 4th moment of distribution: kurtosis             }
  1366.                                             { measure the relative peakedness or flatness of a distribution             }
  1367.  
  1368. {        returns some results of the last statistics evaluation            }
  1369. {        CalcStat must have been called with the withSkewAndCurt parameter            }
  1370. {        set to true before this function can be used.            }
  1371. {                }
  1372.  
  1373.  
  1374.     procedure GetMedian (var count: longint;         { number of data processed             }
  1375.                                     var mean,         { average over all data             }
  1376.                                     median,        { the data in the midth of the ordered sequence of data             }
  1377.                                     minimum,     { smallest (largest negative) value found             }
  1378.                                     maximum: extended);    { largest value found             }
  1379.  
  1380. {        returns some results of the last statistics evaluation            }
  1381. {        CalcStat must have been called with the withMedian parameter            }
  1382. {        set to true before this function can be used.            }
  1383. {                }
  1384.  
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390. {******************************************************************************            }
  1391. {************************ data access routines ********************************            }
  1392.  
  1393.     function XColumn: longint;
  1394. { Returns the column number of the x column in the current data window. Returns zero if no            }
  1395. {x-Column is defined.            }
  1396.  
  1397.     function YColumn: longint;
  1398. { Returns the column number of the y column in the current data window. Returns zero if no            }
  1399. {y-Column is defined.            }
  1400.  
  1401.     function XErrColumn: longint;
  1402. { Returns the column number of the Δx colum in the current data window. Returns zero if no            }
  1403. {Δx-Column is defined.            }
  1404.  
  1405.     function YErrColumn: longint;
  1406. { Returns the column number of the Δy colum in the current data window. Returns zero if no            }
  1407. {Δy-Column is defined.            }
  1408.  
  1409.     procedure SetDefaultCols (xColumn, yColumn, xErrColumn, yErrColumn: longint);
  1410.     {             }
  1411. {        Sets the default x, y, Δx, Δy columns of the current data window.             }
  1412. {        The default x and y columns are those columns that are shown in the             }
  1413. {        preview window.             }
  1414. {        Default columns are also identified by small x, y, Δx, Δy lettering in            }
  1415. {        the column header.            }
  1416. {        Set xErrColumn and yErrColumn to 0 to "undefine" it.            }
  1417. {        Use a negative number if you don't want to change a given default column.            }
  1418. {                }
  1419.  
  1420.     function NrRows: longint;
  1421. { returns the number of rows in the current (frontmost) data window             }
  1422.  
  1423.     function NrCols: longint;
  1424. { returns the number of columns in the current (frontmost) data window             }
  1425.  
  1426.     function GetData (Row, Column: longint): extended;
  1427. { returns the value of the given cell of the data window             }
  1428.  
  1429.     procedure SetData (Row, Column: longint; ex: extended);
  1430. { sets the value of the given cell of the data window             }
  1431.  
  1432.     function TestData (Row, Column: longint): boolean;
  1433. { returns true if the value in the given cell of the data window is a number             }
  1434.  
  1435.     procedure ClearData (Row, Column: longint);
  1436. { erases the value in the given cell of the data window             }
  1437.  
  1438.     function GetSelection: rect;
  1439. { returns the selected cells of the data window, given by the row and column numbers (0 for no selection)             }
  1440.  
  1441.     procedure SetColName (Column: longint; s: str255);
  1442. { writes s into the column title field of the data window             }
  1443.  
  1444.     procedure GetColName (var name: Str255; column: longint);
  1445.     { returns the name of a column in the current data window             }
  1446.  
  1447.     procedure SetDataSize (numberOfRows, numberOfColumns: longint);
  1448.     {              }
  1449. {        Resizes the current data window to match the new number of rows and columns            }
  1450. {        passed as a paramter.            }
  1451. {        Set a parameter to 0 if you don't want to change it.            }
  1452. {        Causes a run-time error if resizing fails.            }
  1453. {                }
  1454.  
  1455.     function GetColType (columnNumber: longint): longint;
  1456.     {              }
  1457. {        returns the type of a column of the current data window (colNumber = 1..MaxNrCols)            }
  1458. {        return values:            }
  1459. {            floatColumn:        4 byte floating point format            }
  1460. {            extendedColumn        8 byte floating point format            }
  1461. {            textColumn:            text format            }
  1462. {                }
  1463.  
  1464.     procedure SetColType (columnNumber: longint; theType: longint);
  1465.     {              }
  1466. {        sets the type of a column of the current data window (colNumber = 1..MaxNrCols)            }
  1467. {        theType:            }
  1468. {            floatColumn:        4 byte floating point format            }
  1469. {            extendedColumn        8 byte floating point format            }
  1470. {            textColumn:            text format            }
  1471. {        Causes a run-time error if conversion failed.            }
  1472. {                }
  1473.  
  1474.     function ColEmpty (columnNumber: longint): boolean;
  1475.  
  1476. {        returns true if the given column doesn't contain any data, false otherwise            }
  1477. {                }
  1478.  
  1479.     procedure SetColWidth (columnNumber: longint; width: integer);
  1480.     {                 }
  1481. {        sets the width of the given column to the number of pixels specified in "width"            }
  1482. {                }
  1483.  
  1484.     procedure SelectCells (left, top, right, bottom: longint);
  1485.     {              }
  1486. {        selects the cells within the given rectangle            }
  1487. {        the coordinates are clipped to the size of the data list            }
  1488. {                }
  1489.  
  1490.  
  1491.     procedure SelectRows (top, bottom: longint; doSelect: Boolean);
  1492.     {              }
  1493. {        selects or deselects the given rows            }
  1494. {        doSelect==true: selects the given rows            }
  1495. {        doSelect==false: deselects the given rows            }
  1496. {        top and bottom are clipped to the size of the list            }
  1497. {        selections outside top/bottom remain as they are            }
  1498. {                }
  1499.  
  1500.  
  1501.     function RowSelected (rowNumber: longint): boolean;
  1502.     {              }
  1503. {        returns true if at least a cell in the given row is selected,            }
  1504. {        false otherwise, or if the given row is outside the list.            }
  1505. {                }
  1506.  
  1507.     function CellSelected (row, column: longint): Boolean;
  1508.     {              }
  1509. {        returns true if the given cell is selected            }
  1510. {        run-time error if row/column is outside the list            }
  1511. {                }
  1512.  
  1513.  
  1514.     procedure SetCell (row, column: longint; s: Str255);
  1515.     {              }
  1516. {        sets the given cell cell to the string s            }
  1517. {                }
  1518.  
  1519.  
  1520.     procedure GetCell (var s: Str255; row, column: longint);
  1521.     {              }
  1522. {        returns the given cell cell in the string s            }
  1523. {                }
  1524.  
  1525.  
  1526.     procedure GetDefaultData (xColH, yColH, xErrColH, yErrColH: ExtendedArrayHandlePtr; indecesH: LongArrayHandlePtr; var arraySize: longint; selectedRowsOnly: Boolean; info: DataInfoPtr);
  1527.  
  1528. {        This routine provides you with a copy of the default x-y data in the            }
  1529. {        current Data window.            }
  1530. {        It allocates memory for the x,y arrays, for the x,y-Error arrays, and            }
  1531. {        for the array that gives the corresponding row numbers in the data window.            }
  1532. {        Then it fills them up with the data. It copies only the data where             }
  1533. {        both the x and the y cell contain valid numbers.            }
  1534. {        Pass nil for one of these array if you are not interested in it.            }
  1535.  
  1536. {        IndecesH contains, for each x-y data in the data-arrays, the row number in            }
  1537. {        the current data list where that data is found.            }
  1538.  
  1539. {        when selectedRowsOnly is true, only data in selected rows is used to fill up            }
  1540. {        the arrays.            }
  1541. {                    }
  1542. {        The arrays returned by GetDefaultData contain valid data starting from             }
  1543. {        the element with index 1. The value of the element with index 0 is undefined.            }
  1544. {        The last element has index "arraySize".            }
  1545. {        arraySize is set to zero in case of out-of-memory situations or other problems.            }
  1546. {                    }
  1547. {        Provide a pointer to a data struct of type DataInfo as the last paraemter if            }
  1548. {        you are interested in extra information on the data set.            }
  1549. {        The elements of the DataInfo struct are set by GetDefaultData, and they tell            }
  1550. {        you the boundaries of the x- and y- data, if the data is ordered with            }
  1551. {        x-values growing with the index in the arrays, if any cells in the columns            }
  1552. {        dedicated to the errors of the data points where found empty.            }
  1553. {        See the declaration of the DataInfo structure, above.            }
  1554. {                    }
  1555. {                }
  1556.  
  1557.  
  1558.  
  1559.  
  1560.  
  1561. {******************************************************************************            }
  1562. {****************************** miscellaneous ********************************            }
  1563.  
  1564.  
  1565.     procedure SetWaitTitle (s: Str255);
  1566.  
  1567. {        writes the string s in the window put up by profit while running programs            }
  1568. {        This string serves as a title.            }
  1569. {                }
  1570.  
  1571.  
  1572.     procedure SetWaitText (s1, s2, s3, s4, s5, s6: Str255);
  1573.  
  1574. {        writes the strings s1-s6 in the window put up by profit while running programs            }
  1575. {        in a two columns by three row arrangement:            }
  1576. {        s1        s2            }
  1577. {        s3        s4            }
  1578. {        s5        s6            }
  1579. {        Use an empty string if you don't want to change it.            }
  1580. {                }
  1581.  
  1582.  
  1583.     function MarkedX (i: integer): extended;
  1584.     function MarkedY (i: integer): extended;
  1585.  
  1586. {    return the x and y coordinate of a marker in the preview window.            }
  1587. {    i is the index of the marker.            }
  1588. {    i = 0 for the reference marker.            }
  1589. {                }
  1590.  
  1591.     procedure MarkedCoord (i: integer; var x, y: extended);
  1592.  
  1593. {    returns the x and y coordinates of a marker in the preview window.            }
  1594. {    i is the index of the marker.            }
  1595. {    i = 0 for the reference marker.            }
  1596. {                }
  1597.  
  1598.  
  1599.     procedure DoMenu (s: Str255);
  1600.  
  1601. {        executes a menu command, with the same effect as if the command            }
  1602. {        is chosen by hand.            }
  1603. {        s is of the type 'MenuTitle:MenuItem' or 'MenuTitle:SubmenuTitle:MenuItem'            }
  1604. {        Causes a run-time error if such a menu item does not exist.            }
  1605. {        add "$OK" at the end of the string if you want to bypass dialog boxes            }
  1606. {        and simulate a click on ok.            }
  1607. {                }
  1608.  
  1609.  
  1610.  
  1611.     function TestStop: boolean;
  1612. { returns true if a user presses the command key and '.' , or if proFit likes to stop the execution of the function or program             }
  1613.  
  1614.     procedure StopExecution;
  1615. { tells proFit to stop the execution after having completed             }
  1616. { the actual function call (First, Run,  etc .)             }
  1617.  
  1618.  
  1619.     function GetAndSetStatus(newStatus:integer; var s: Str255):integer;
  1620. { Returns the present execution status, then sets it to newStatus }
  1621. { The status can be: }
  1622. {    0: if normal operation }
  1623. {    1: if the user interrupted operation }
  1624. {    2: if a warning has been posted }
  1625. {    3: if a run-time error has been posted }
  1626. { Set newStatus to -1 if you don't want to change the current status }
  1627. { If you set a status 2 or 3, pass a suitable error or warning message }
  1628. { in s It will be shown once your module is finshed. }
  1629. { On return, s holds the current message (if status was 2 or 3) }
  1630. { Note, that calling StopExecution is equivalent to setting error status }
  1631. { to 1 and TestStop returns true if error status is 1 or 3 }
  1632.  
  1633.  
  1634.  
  1635.  
  1636. {******************************************************************************            }
  1637. {***************************** advanced routines ******************************            }
  1638.  
  1639.  
  1640.  
  1641.  
  1642. {    The following routines are provided for the experienced programmer.            }
  1643. {    They allow for more power and flexibility when writing powerful            }
  1644. {    external modules.            }
  1645.  
  1646.  
  1647.  
  1648.     procedure HandleEvent (var theEvent: EventRecord);
  1649.  
  1650. {        Passes theEvent to pro Fit for handling it. Use this call to            }
  1651. {        handle update events when creating your own window.            }
  1652. {                }
  1653.  
  1654.     function CancelEvent (var theEvent: EventRecord):Boolean;
  1655.  
  1656. {        returns true if theEvent is a key-down event for the escape key or cmd-'.' }
  1657. {                }
  1658.  
  1659.     procedure DeactivateProFitWindows;
  1660.  
  1661. {        Deactivates all of pro Fit's windows and disables all menus.            }
  1662. {        Call this routine before showing a window or creating a dialog.            }
  1663. {        Each call to DectivateProFitWindows must be matched with a call to            }
  1664. {        ActivateProFitWindows            }
  1665. {                }
  1666.  
  1667.     procedure ActivateProFitWindows;
  1668.  
  1669. {        Activates pro Fit's frontmost window and enables the menus.            }
  1670. {        Call this routine after closing a window or a dialog.            }
  1671. {        Each call to ActivateProFitWindows must be preceded by a call to            }
  1672. {        DectivateProFitWindows            }
  1673. {                }
  1674.  
  1675.     function GetModuleFile: FSSpecPtr;
  1676.  
  1677. {        Returns a pointer to the FSSpec record of this file of this module.            }
  1678. {                }
  1679.  
  1680.  
  1681.  
  1682. { advanced data access routines             }
  1683.  
  1684. { The following definitions are used for accessing 8 byte floating point values on }
  1685. { compilers that do not recognize this data type }
  1686. { We define the following data types and symbols: }
  1687. {    double_8:    an 8 byte floating point value type }
  1688. {    COMPILER_KNOWS_DOUBLE_8:    this symbol is true if the compiler knows how to convert between }
  1689. {                                double_8 and extended. It is false if you must use the }
  1690. {                                functions Dbl8ToExt and ExtToDbl8 for this conversion }
  1691. {    EXT_SIZE:                    this symbol is 8, 10 or 12, depending on the size of the type extended }
  1692.  
  1693.     type
  1694.  
  1695. {$IFC GENERATINGPOWERPC }
  1696.     { For PowerPC compilers, double and extended are 8 bytes, so there's no conversion necessary }
  1697.     {$SETC COMPILER_KNOWS_DOUBLE_8 := true}
  1698.     {$SETC EXT_SIZE := 8}
  1699.         double_8 = double;                { a 8 byte floating point number }
  1700. {$ELSEC}
  1701.     {$IFC NOT UNDEFINED THINK_PASCAL }
  1702.         { Think Pascal can convert between double_8 and extended }
  1703.         {$SETC COMPILER_KNOWS_DOUBLE_8 := true}
  1704.         {$IFC OPTION(MC68881)}
  1705.             {$SETC EXT_SIZE := 12}
  1706.         {$ELSEC}
  1707.             {$SETC EXT_SIZE := 10}
  1708.         {$ENDC}
  1709.         double_8 = double;                { a 8 byte floating point number }
  1710.     {$ELSEC}
  1711.         { Metrowerks pascal and other pascal compilers cannot use 8 byte doubles while }
  1712.         { extended is 10 or 12 bytes }
  1713.         {$SETC COMPILER_KNOWS_DOUBLE_8 := false}
  1714.         {$IFC OPTION(MC68881)}
  1715.             {$SETC EXT_SIZE := 12}
  1716.         {$ELSEC}
  1717.             {$SETC EXT_SIZE := 10}
  1718.         {$ENDC}
  1719.         double_8 = array[0..1] of longint;    { MW Pascal does not support 8 byte floating point numbers }
  1720.                                             { We therefore define this record and the following routines }
  1721.                                             { for accessing this type }
  1722.     {$ENDC}
  1723. {$ENDC}
  1724.  
  1725.  
  1726.         FloatColumnArray = array[0..0] of real;        { a variable size array of 4 byte floating point numbers }
  1727.         DoubleColumnArray = array[0..0] of double_8;    { a variable size array of 8 byte floating point numbers }
  1728.                                         { GetColHandle/SetColHandle: Index [0] is reserved. First valid index is [1] }
  1729.  
  1730.         FloatColumnPtr = ^FloatColumnArray;
  1731.         FloatColumnHandle = ^FloatColumnPtr;        { column handle for columns of type floatColumn }
  1732.  
  1733.         DoubleColumnPtr = ^DoubleColumnArray;
  1734.         DoubleColumnHandle = ^DoubleColumnPtr;        { column handle for columns of type doubleColumn }
  1735.  
  1736.         TextColumnPtr = ^StringData;
  1737.         TextColumnHandle = ^TextColumnPtr;            { column handle for columns of type textColumn }
  1738.  
  1739.  
  1740.     procedure GetColHandle (col: longint; var colH: Handle; var length: longint; var colType: longint; forWriting: Boolean);
  1741.  
  1742. {        Returns a handle (colH) to the data of the given column. You can read and/or            }
  1743. {        modify the data in the handle. This is much faster than accessing a column's            }
  1744. {        data through GetData/SetData and GetCell/SetCell.              }
  1745. {        colH:        The handle to the column's data. Can be nil if the corresponding column            }
  1746. {                    is empty.            }
  1747. {        length:     the number of rows held by this column, presently always equal to the number            }
  1748. {                    of rows of the data window            }
  1749. {        forWriting: set to true if you intend to change the contents of the column,            }
  1750. {                    set to false otherwise.            }
  1751. {        colType:    the type of the column (textColumn, floatColumn, extendedColumn)            }
  1752. {        If you change the data in the returned handle, you must subsequently call            }
  1753. {        SetColHandle.            }
  1754. {        Do never call DisposeHandle(colH) — colH is allocated and deallocated by pro Fit.            }
  1755.  
  1756. {        if colType = floatColumn, colH is a handle of type FloatColumnHandle            }
  1757. {              (handle to an array of 4-byte floating point values)            }
  1758. {        if colType = extendedColumn, colH is of type extendedColumnHandle            }
  1759. {            (handle to an array of 8-byte floating point values)            }
  1760. {        if colType = textColumn, colH is of type TextColumnHandle.            }
  1761. {               (handle to a record of type StringData)            }
  1762.  
  1763. {        Note: For columns of type floatColumn and extendedColumn, the first entry of the            }
  1764. {        array is reserved. The value of the first cell is found in the array element            }
  1765. {        having index 1.            }
  1766.  
  1767. {        Note2: if colType = extendedColumn, the values are stored as 8 byte doubles (double_8) }
  1768. {        Some compilers cannot convert between double_8 and extended and cannot run calculations }
  1769. {        with double 8. For such comilers, the symbol COMPILER_KNOWS_DOUBLE_8 defined above is false }
  1770. {        To access double_8 values from a compiler that does not support this type, use the }
  1771. {        routines Dbl8ToExt and ExtToDbl8 defined below }
  1772.  
  1773. {        Warning: This routine should by used by experienced programmers only.            }
  1774. {        Warning: Accessing text columns in this way is _not_ recommended. The             }
  1775. {                 definition of the data structure may change in the future.            }
  1776.  
  1777. {        While you are working on the data in colH, you should not call any other            }
  1778. {        routines accessing the data window except GetColumnHandle and SetColumnHandle.            }
  1779. {        When you modify the data in colH, you should avoid calling any pro Fit routines            }
  1780. {        until you have called SetColHandle — if you want to call other pro Fit routines,            }
  1781. {        first make a copy of the data by using HandToHand; once you have made all            }
  1782. {        modifications to the data, call SetColHandle.            }
  1783. {                }
  1784.  
  1785.     procedure SetColHandle (col: longint; colH: Handle);
  1786.  
  1787. {        Sets a given column to the data in colH.             }
  1788. {        The organization of the data in colH depends on the data type of the column:            }
  1789. {         if floatColumn, colH is a handle of type FloatColumnHandle            }
  1790. {              (handle to an array of 4-byte floating point values)            }
  1791. {        if extendedColumn, colH is of type extendedColumnHandle            }
  1792. {            (handle to an array of 8-byte floating point values)            }
  1793. {        if textColumn, colH is of type TextColumnHandle.            }
  1794. {            (handle to a record of type StringData)            }
  1795. {        (To get a column's type, call GetColType)            }
  1796.  
  1797. {        Once you call SetColHandle, the handle becomes property of pro Fit — do            }
  1798. {        not dispose it.            }
  1799. {        colH can either be:            }
  1800. {          - a handle that you allocated yourself. In this case, the Handle's size must be:            }
  1801. {            4*(nrRows+1) for columns of type floatColumn            }
  1802. {            8*(nrRows+1) for columns of type extendedColumn            }
  1803. {            14 + size of all strings for columns of type textColumn            }
  1804. {          - a handle that you obtained from GetColHandle            }
  1805. {         - nil if you want to clear the given column            }
  1806.  
  1807. {        Note: if colType = extendedColumn, the values are stored as 8 byte doubles (double_8) }
  1808. {        Some compilers cannot convert between double_8 and extended and cannot run calculations }
  1809. {        with double 8. For such comilers, the symbol COMPILER_KNOWS_DOUBLE_8 defined above is false }
  1810. {        To access double_8 values from a compiler that does not support this type, use the }
  1811. {        routines Dbl8ToExt and ExtToDbl8 defined below }
  1812.  
  1813. {        Warning: This routine should by used by experienced programmers only.            }
  1814. {        Warning: Accessing text columns in this way is _not_ recommended. The             }
  1815. {                 definition of the data structure may change in the future.            }
  1816. {                }
  1817.  
  1818.     function Dbl8ToExt (x: double_8): extended;
  1819.     { converts the double_8 value x into an extended (10 byte) value }
  1820.     { This function is only required for comilers that do not support the double_8 data type }
  1821.  
  1822.     function ExtToDbl8 (x: extended): double_8;
  1823.     { converts the double_8 value x into an extended (10 byte) value }
  1824.     { This function is only required for comilers that do not support the double_8 data type }
  1825.  
  1826.  
  1827.  
  1828. {$IFC GENERATING68K}
  1829.     procedure runtimeProc (pb, p: ptr);
  1830. { This routine is a gateaway for calling the set of proFit's procedures and functions that use            }
  1831. { the parameters contained in the record runTimeParamRec. You do not need to work directly            }
  1832. { with runTimeParamRec. Just use the procedures and functions defined below. These procedure            }
  1833. { correctly set the parameters contained in runTimeParamRec and call the runtimeProc to produce            }
  1834. { the expected results.              }
  1835.     inline
  1836.         $205F, $4E90;
  1837.  
  1838.     function MyMemory (i: integer): integer;
  1839. { The code of this routine will be replaced by data - this routine is never called             }
  1840. {$ENDC}
  1841.  
  1842.     function GetPb: ExtModulesParamBlockPtr;
  1843. { returns the current parameter block. Only advanced                             }
  1844. { programmers may need this function.                                         }
  1845. { WARNING: the definition of ExtModulesParamBlock may change in future versions                             }
  1846. { of pro Fit. Using it from within your function may cause compatibility problems                             }
  1847. { with those future versions.                            }
  1848.  
  1849.     procedure StartUp (pb: ExtModulesParamBlockPtr);
  1850. { should be called by main() at beginning             }
  1851.  
  1852.  
  1853.  
  1854. implementation
  1855.  
  1856. { This implementation part contains code that takes care of the communication between                }
  1857. { an external module and proFit.                                                }
  1858.  
  1859. { Everything that you need to know to produce an External Module for proFit                }
  1860. { can be found in the interface part.                                                }
  1861. { Just "use" this file in the "uses" statment at the beginning of the file containing your                }
  1862. { code, as it is done in FunctionTemplate.p and ProgramTemplate.p.                }
  1863. { It is easier and faster if you use one of these files to create a new external module.                }
  1864.  
  1865. { You do not need to understand what is going on in the implementation part of this file                 }
  1866. { unless you need to do very advanced and exotic things.                }
  1867.  
  1868. {$IFC NOT GENERATING68K}
  1869.         { if generating PPC code             }
  1870.     var
  1871.         staticPb: ExtModulesParamBlockPtr;
  1872.  
  1873.  
  1874.     procedure StartUp (pb: ExtModulesParamBlockPtr);
  1875.     begin
  1876.         staticPb := pb;
  1877.     end;
  1878.  
  1879.     function GetPb: ExtModulesParamBlockPtr;
  1880.     begin
  1881.         GetPb := staticPb;
  1882.     end;
  1883.  
  1884.     function CallUniversalProc (theProcPtr: UniversalProcPtr; procInfo: ProcInfoType; pb: ptr): LONGINT;
  1885.         C;
  1886.     external;
  1887.  
  1888.     procedure CallRuntimeProc (pb: ptr);
  1889.         var
  1890.             upp: UniversalProcPtr;
  1891.             dummy: longint;
  1892.     begin
  1893.         upp := NewRoutineDescriptor(staticPb^.RunTimeProcPtr, $000000C1, kPowerPCISA);
  1894.         if (upp <> nil) then
  1895.             begin
  1896.                 dummy := CallUniversalProc(upp, $000000C1, pb);
  1897.                 DisposeRoutineDescriptor(upp);
  1898.             end;
  1899.     end; { CallRuntimeProc             }
  1900.  
  1901. {$ELSEC}
  1902.     { if generating 68k code             }
  1903.  
  1904.     function MyMemory (i: integer): integer;
  1905.     begin
  1906.         MyMemory := i - 1;        { just generate some code             }
  1907.     end;
  1908.  
  1909.  
  1910.     procedure StartUp (pb: ExtModulesParamBlockPtr);
  1911.         var
  1912.             p: ExtModulesParamBlockH;
  1913.     begin
  1914.         p := ExtModulesParamBlockH(@MyMemory);        { this is a dirty trick for storing pb in static memory             }
  1915.         p^ := pb;
  1916.     end;
  1917.  
  1918.     function GetPb: ExtModulesParamBlockPtr;
  1919.         var
  1920.             p: ExtModulesParamBlockH;
  1921.     begin
  1922.         p := ExtModulesParamBlockH(@MyMemory);        { this is a dirty trick for storing pb in static memory             }
  1923.         GetPb := p^;
  1924.     end;
  1925.  
  1926.     procedure CallRuntimeProc (pb: ptr);
  1927.         var
  1928.             p: ExtModulesParamBlockH;
  1929.     begin
  1930.         p := ExtModulesParamBlockH(@MyMemory);        { this is a dirty trick for storing pb in static memory             }
  1931.         runtimeProc(pb, p^^.RunTimeProcPtr);
  1932.     end; { CallRuntimeProc             }
  1933. {$ENDC}
  1934.     type
  1935.  
  1936. { the following record is used as a parameter block for all the routines provided by proFit }
  1937. { This file defines a set of procedures that provide calls to the functions and            }
  1938. { procedures that use the record  runTimeParamRec  as a parameter.   These procedures and functions    }
  1939. { correctly set the parameters contained in runTimeParamRec and call  runtimeProc to produce        }
  1940. { the expected results. The declaration of these procedures is found above, in the interfaceend;}
  1941. { part. The implementation is found below, at the end of this file.                    }
  1942.  
  1943.  
  1944. {$ALIGN MAC68K}
  1945.         runTimeParamRec = record
  1946.                 result: osErr;            { noErr or error code }
  1947.                 what: integer;        { the operation }
  1948. {    "what" can currently assume the following values:                                }
  1949. {    1:    Obsolete. Used for "newCurve" in earlier versions }
  1950. {    2:    moveto }
  1951. {    3:     lineto }
  1952. {    4:    GetGraphCoordinates }
  1953. {    5:    CreateNewGraf  }
  1954. {    6:    Obsolete. Used for "NewDataSet" in earlier versions  }
  1955. {    7:    Obsolete. Used for an earlier version of AddDataPoint  }
  1956. {    11: random }
  1957. {    12:    TestStopend;}
  1958. {    13:    writeend;}
  1959. {    14:    writelnend;}
  1960. {    15:    writeExtendedend;}
  1961. {    16:    alertend;}
  1962. {    17:    inputend;}
  1963. {    18:    askend;}
  1964. {    19:    SetColumnNameend;}
  1965. {    20-23:xColumn, yColumn, xErrColumn, yErrColumnend;}
  1966. {    24:    GetSelectionend;}
  1967. {    25:    GetDataend;}
  1968. {    26:    SetDataend;}
  1969. {    27:    ClearDataend;}
  1970. {    28:    TestDataend;}
  1971. {    29:    NumberInvalidend;}
  1972. {    30:    SetParamLimitsend;}
  1973. {    31:    SetParamDefaultValueend;}
  1974. {    32:    SetParamNamesend;}
  1975. {    33:    SetParamDefaultsend;}
  1976. {    34:    NrRowsend;}
  1977. {    35:    NrColsend;}
  1978.  
  1979. {    40:    StopExecutionend;}
  1980.  
  1981. {     41:    Erf                                                    (v. 5 and later)                        }
  1982. {     42:    Erfc                                                (v. 5 and later)}
  1983. {     43:    function MarkX(i:integer):extended;                    (v. 5 and later)}
  1984. {     44:    function MarkY(i:integer):extended;                    (v. 5 and later)}
  1985. {     45:    procedure MarkCoords(i:integer; var x,y:extended);    (v. 5 and later)    }
  1986.  
  1987.  
  1988. {    100:    CallFunctionend;}
  1989. {    101:    GetFunctionParamend;}
  1990. {    102:    SetFunctionParamend;}
  1991. {    103:    CallProgramend;}
  1992. {    104:    GetFunctionParamModeend;}
  1993. {    105:    GetFunctionParamNumend;}
  1994. {    110:    CalculateIntegralend;}
  1995. {    111-114:maxima, minima, roots,derivative }
  1996. {    120-124:chiSquared,numFitParams,fittedParams, covar,paramSD }
  1997.  
  1998. {    All following routines are available starting from pro Fit version 5 and later.}
  1999. {     }
  2000. {    125-126:SetErrorAnalysisDefaults, ConfidenceInterval                }
  2001. {    130-133:calcStat, getBasics, getSkew, getMedian            }
  2002.  
  2003. {    135:        DoMenu}
  2004.  
  2005. {    150-154:    FrontWindow, NewWindow, SetCurrentWindow, GetCurrentWindow, CloseWindow}
  2006. {    155-159:    FrontmostWindow, SaveWindow, SaveWindowAs, GetWindowID, GetWindowType}
  2007. {    160-163:    GetNextWindow, OpenFile, OpenData, OpenText}
  2008. {    164-165:    SaveDataAsText, SaveDrawingAs}
  2009. {    166      : SetWindowTitle}
  2010. {    167-168: PlaceWindow, BringWindowToFront}
  2011. {    169      : Compile}
  2012.  
  2013. {    170-172:    SetDataWindowSize, GetColType, SetColType}
  2014. {    173-177: SelectCells, SelectRows, RowSelected, CellSelected, SetCell}
  2015. {    173-177: SelectCells, SelectRows, RowSelected, CellSelected, SetCell}
  2016. {    178-182: GetCell, GetColumnName, SetDefaultColumns, GetColHandle, SetColHandle}
  2017. {    186-187: SetBoxTitle, SetWindowInfo}
  2018. {     }
  2019. {    189:     SetTextFileFormat}
  2020. {    190-192: CreateTextFile, CloseTextFile, WriteToTextFile}
  2021. {    193-196: HandleEvent, DeactivateWindows, ActivateWindows, CancelEvent}
  2022. {    197-198: NumberToStr255, Str255ToNumber, GetAndSetStatus}
  2023. {    197-198: NumberToStr255, Str255ToNumber}
  2024.  
  2025. {    200-207:    SetLineStyle,SetFillPattern,SetArrowStyle,SetTextStyle}
  2026. {                 SetDataPointStyle, SetBGDataPointStyle,SetLineColor,SetFillColor}
  2027. {    208-222: DrawRect,DrawEllipse,DrawLine,DrawTextLine,DrawNumber,DrawDataPoint,OpenPolygon,ClosePolygon,}
  2028. {                 CloseCurve, CloseDataSet,SetNewGraphRect,GroupBegin,Move,Line}
  2029. {    223:        GetLastClickedCoordinates}
  2030. {    224,225:    OpenCurve, OpenDataSet}
  2031. {    226        DisableDrawingUpdates}
  2032. {    227-229:    SetCurrentGraph, GetNextGraph, GetCurrentGraph}
  2033. {    230-231:    GetGraphFrame, SetGraphFrame}
  2034. {    232-245:    GetCurrentAxis,SetCurrentAxis,DeleteAxis,MakeNewAxis,SetRange,MakeTicks}
  2035. {                 SetLabelsFormat,ClearTicks,ClearLabels,AddTick,SetLabel,SetLabelText}
  2036. {                 SetAxisPosition,SetAxisAttributes}
  2037. {    246:        SetGraphAttributes}
  2038. {    247:        DrawPICT}
  2039. {    248-249:    SetCurveFill, SetEBarStyle}
  2040. {    250        AddDataPoint            }
  2041.  
  2042.                 case integer of
  2043.                     0: (
  2044.                             p: array[0..7] of Ptr;    { pointers to routine parameters used by version 5.0 and later }
  2045.                                                 { The type of the parameters is specified in the implementation }
  2046.                                                 { of the routines in proFit_interface2.p                        }
  2047.                     );
  2048.                     2, 3: (
  2049.                             y, x: extended;
  2050.                     );    { lineto, moveto }
  2051.                     4: (
  2052.                             ymax, ymin, xmax, xmin: ^extended;
  2053.                     );    { GetGraphCoordinates }
  2054.                     5: (
  2055.                             xmin5, xmax5, ymin5, ymax5: extended;
  2056.                             xScaling, yScaling: integer;
  2057.                     );    { createNewGraf }
  2058.                     11, 20, 21, 22, 23, 120: (
  2059.                             retval11: extended;
  2060.                     );    { random, xErrColumn,yColumn,xErrColumn,yErrColumn,ChiSquared }
  2061.                     12: (
  2062.                             retval12: boolean;
  2063.                     );    { executionstopped }
  2064.                     13, 14: (
  2065.                             theMessage: StringPtr;
  2066.                     );    { write/writeln }
  2067.                     15: (
  2068.                             extVal: extended;
  2069.                     );{ WriteNumber }
  2070.                     16: (
  2071.                             theMessage16: StringPtr;
  2072.                             retval16: boolean;
  2073.                     );    { alert }
  2074.                     17: (
  2075.                             r: ^InputRec;
  2076.                             nrargs: integer;
  2077.                             retval17: boolean;
  2078.                     );    { MyInput }
  2079.                     18: (
  2080.                             question: StringPtr;
  2081.                             answer: ^integer;
  2082.                             retval18: boolean;
  2083.                     );    { ask }
  2084.                     19: (
  2085.                             name: StringPtr;
  2086.                             column19: longint;
  2087.                     );    { SetColumnName }
  2088.                     24: (
  2089.                             selectionRect: Rect;
  2090.                     );    { GetSelection }
  2091.                     25, 26: (
  2092.                             column25, row25: longint;
  2093.                             cellValue: extended;
  2094.                     );    { GetData/SetData }
  2095.                     27: (
  2096.                             column27, row27: longint;
  2097.                     );    { ClearData }
  2098.                     28: (
  2099.                             column28, row28: longint;
  2100.                             retval28: boolean;
  2101.                     );    { TestData }
  2102.                     29: (
  2103.                             aNum: extended;
  2104.                             retval29: boolean;
  2105.                     );    { NumberInvalid }
  2106.                     30: (
  2107.                             ahigh, alow: extended;
  2108.                             paramIndex30: integer;
  2109.                     );    { SetParamLimits }
  2110.                     31: (
  2111.                             aval: extended;
  2112.                             paramIndex31: integer;
  2113.                     );    { SetParamDefaultValue }
  2114.                     32: (
  2115.                             aName32: StringPtr;
  2116.                             paramIndex32: integer;
  2117.                     );    { SetParamName }
  2118.                     33: (
  2119.                             ahigh33, alow33: extended;
  2120.                             aName33: StringPtr;
  2121.                             amode33: integer;
  2122.                             aval33: extended;
  2123.                             paramIndex33: integer;
  2124.                     );    { SetParamDefaults }
  2125.                     100: (
  2126.                             xval: extended;
  2127.                             funcName100: StringPtr;
  2128.                             retval100: extended;
  2129.                     );    { callfunction }
  2130.                     101, 104: (
  2131.                             paramIndex101: integer;
  2132.                             funcName101: StringPtr;
  2133.                             retval101: extended;
  2134.                     );    { getfunctionparam, getfunctionparammode }
  2135.                     102: (
  2136.                             pVal: extended;
  2137.                             paramIndex102: integer;
  2138.                             funcName102: StringPtr;
  2139.                     );    { setfunctionparamend;}
  2140.                     103: (
  2141.                             progName: StringPtr;
  2142.                     );    { callProgram }
  2143.                     105: (
  2144.                             funcName105: StringPtr;
  2145.                             retval105: extended;
  2146.                     );    { getfunctionparamnum }
  2147.                     110: (
  2148.                             numIterations: integer;
  2149.                             max, min: extended;
  2150.                             funcName110: StringPtr;
  2151.                             retval110: extended;
  2152.                     );    { DoIntegrate }
  2153.                     111, 112, 113, 114: (
  2154.                             max111, min111: extended;
  2155.                             funcName111: StringPtr;
  2156.                             retval111: extended;
  2157.                     );    { findMaximum, findMinimum, findRoot,derivative }
  2158.                     115: (
  2159.                             xCol, yCol, errCol: longint;
  2160.                             errVal: extended;
  2161.                             selectionOnly: longint;
  2162.                             funcName115: StringPtr;
  2163.                     );    { Fit }
  2164.                     121: (
  2165.                             numFitParams: integer;
  2166.                     );    { numFitParams }
  2167.                     122, 123: (
  2168.                             paramIndex122: integer;
  2169.                             retval122: extended;
  2170.                     );    { fittedParams, paramSD }
  2171.                     124: (
  2172.                             paramIndex1, paramIndex2: integer;
  2173.                             retval124: extended;
  2174.                     );    { CovarMatrix }
  2175.  
  2176.  
  2177.             end;
  2178.  
  2179. {$ALIGN RESET}
  2180.  
  2181.  
  2182.     procedure GrMoveto (x, y: extended);
  2183.         var
  2184.             pb: runTimeParamRec;
  2185.     begin
  2186.         pb.x := x;
  2187.         pb.y := y;
  2188.         pb.what := 2;
  2189.         CallRuntimeProc(@pb);
  2190.     end;
  2191.  
  2192.     procedure GrLineto (x, y: extended);
  2193.         var
  2194.             pb: runTimeParamRec;
  2195.     begin
  2196.         pb.x := x;
  2197.         pb.y := y;
  2198.         pb.what := 3;
  2199.         CallRuntimeProc(@pb);
  2200.     end;
  2201.  
  2202.     procedure GrMove (x, y: extended);
  2203.         var
  2204.             pb: RunTimeParamRec;
  2205.     begin
  2206.         pb.what := 221;
  2207.         pb.p[1] := @x;
  2208.         pb.p[0] := @y;
  2209.         CallRunTimeProc(@pb);
  2210.     end;
  2211.  
  2212.     procedure GrLine (x, y: extended);
  2213.         var
  2214.             pb: RunTimeParamRec;
  2215.     begin
  2216.         pb.what := 222;
  2217.         pb.p[1] := @x;
  2218.         pb.p[0] := @y;
  2219.         CallRunTimeProc(@pb);
  2220.     end;
  2221.  
  2222.     procedure GetGraphCoordinates (var xmin, xmax, ymin, ymax: extended);
  2223.         var
  2224.             pb: runTimeParamRec;
  2225.     begin
  2226.         pb.xmin := @xmin;
  2227.         pb.xmax := @xmax;
  2228.         pb.ymin := @ymin;
  2229.         pb.ymax := @ymax;
  2230.         pb.what := 4;
  2231.         CallRuntimeProc(@pb);
  2232.     end;
  2233.  
  2234.     procedure CreateNewGraf (xmin, xmax, ymin, ymax: extended; xScaling, yScaling: integer);
  2235.         var
  2236.             pb: runTimeParamRec;
  2237.     begin
  2238.         pb.what := 5;
  2239.         pb.xmin5 := xmin;
  2240.         pb.xmax5 := xmax;
  2241.         pb.ymin5 := ymin;
  2242.         pb.ymax5 := ymax;
  2243.         pb.xScaling := xScaling;
  2244.         pb.yScaling := yScaling;
  2245.         CallRunTimeProc(@pb);
  2246.     end;
  2247.  
  2248.     function pRandom: extended;
  2249.         var
  2250.             pb: runTimeParamRec;
  2251.     begin
  2252.         pb.what := 11;
  2253.         CallRuntimeProc(@pb);
  2254.         pRandom := pb.retval11;
  2255.     end;
  2256.  
  2257.     function TestStop: boolean;
  2258.         var
  2259.             pb: runTimeParamRec;
  2260.     begin
  2261.         pb.what := 12;
  2262.         CallRuntimeProc(@pb);
  2263.         TestStop := pb.retval12;
  2264.     end;
  2265.  
  2266.     procedure StopExecution;
  2267.         var
  2268.             pb: RunTimeParamRec;
  2269.     begin
  2270.         pb.what := 40;
  2271.         CallRuntimeProc(@pb);
  2272.     end;
  2273.  
  2274.     function GetAndSetStatus(newStatus:integer; var s: Str255):integer;
  2275.         var
  2276.             pb: runTimeParamRec;
  2277.             retval:integer;
  2278.     begin
  2279.         pb.what := 199;
  2280.         pb.p[0] := @s[0];
  2281.         pb.p[1] := @newStatus;
  2282.         pb.p[2] := @retval;
  2283.         CallRuntimeProc(@pb);
  2284.         GetAndSetStatus := retval;
  2285.     end;
  2286.  
  2287.     procedure WriteString (s: Str255);
  2288.         var
  2289.             pb: runTimeParamRec;
  2290.     begin
  2291.         pb.theMessage := @s;
  2292.         pb.what := 13;
  2293.         CallRuntimeProc(@pb);
  2294.     end;
  2295.  
  2296.  
  2297.  
  2298.     procedure WritelnString (s: Str255);
  2299.         var
  2300.             pb: runTimeParamRec;
  2301.     begin
  2302.         pb.theMessage := @s;
  2303.         pb.what := 14;
  2304.         CallRuntimeProc(@pb);
  2305.     end;
  2306.  
  2307.     procedure WriteText(length: longint; theText: Ptr);
  2308.         var
  2309.             pb: RunTimeParamRec;
  2310.     begin
  2311.         pb.what := 188;
  2312.         pb.p[1] := @length;
  2313.         pb.p[0] := theText;
  2314.         CallRunTimeProc(@pb);
  2315.     end;
  2316.  
  2317.     procedure WriteInt (i: longint);
  2318.         var
  2319.             s: str255;
  2320.     begin
  2321.         NumToString(i, s);
  2322.         WriteString(s);
  2323.     end;
  2324.  
  2325.     procedure WriteNumber (d: extended);
  2326.         var
  2327.             pb: runTimeParamRec;
  2328.     begin
  2329.         pb.what := 15;
  2330.         pb.extVal := d;
  2331.         CallRuntimeProc(@pb);
  2332.     end;
  2333.  
  2334.     procedure NumberToStr255(x: extended; var s: Str255; format, digits:integer);
  2335.         var
  2336.             pb: runTimeParamRec;
  2337.     begin
  2338.         pb.what := 197;
  2339.         pb.p[0] := @digits;
  2340.         pb.p[1] := @format;
  2341.         pb.p[2] := @s[0];
  2342.         pb.p[3] := @x;
  2343.         CallRuntimeProc(@pb);
  2344.     end;
  2345.  
  2346.     function Str255ToNumber(s: Str255; var x: extended):integer;
  2347.         var
  2348.             pb: runTimeParamRec;
  2349.             retval: integer;
  2350.     begin
  2351.         pb.what := 198;
  2352.         pb.p[0] := @x;
  2353.         pb.p[1] := @s[0];
  2354.         pb.p[2] := @retval;
  2355.         CallRuntimeProc(@pb);
  2356.         Str255ToNumber := retval;
  2357.     end;
  2358.  
  2359.     function AlertBox (s: str255): boolean;
  2360.         var
  2361.             pb: runTimeParamRec;
  2362.     begin
  2363.         pb.theMessage := @s;
  2364.         pb.what := 16;
  2365.         CallRuntimeProc(@pb);
  2366.         AlertBox := pb.retval16;
  2367.     end;
  2368.  
  2369.     function InputBox (nrArgs: integer; var r: inputRec): boolean;
  2370.         var
  2371.             pb: runTimeParamRec;
  2372.     begin
  2373.         pb.nrArgs := nrArgs;
  2374.         pb.r := @r;
  2375.         pb.what := 17;
  2376.         CallRuntimeProc(@pb);
  2377.         InputBox := pb.retval17;
  2378.     end;
  2379.  
  2380.  
  2381.  
  2382.  
  2383.     function AskBox (var answer: integer; s: str255): boolean;
  2384.         var
  2385.             pb: runTimeParamRec;
  2386.     begin
  2387.         pb.question := @s;
  2388.         pb.what := 18;
  2389.         pb.answer := @answer;
  2390.         CallRuntimeProc(@pb);
  2391.         AskBox := pb.retval18;
  2392.     end;
  2393.  
  2394.  
  2395.  
  2396.  
  2397.     procedure SetColName (Column: longint; s: str255);
  2398.         var
  2399.             pb: runTimeParamRec;
  2400.     begin
  2401.         pb.column19 := Column;
  2402.         pb.name := @s;
  2403.         pb.what := 19;
  2404.         CallRuntimeProc(@pb);
  2405.     end;
  2406.  
  2407.  
  2408.     function xColumn: longint;
  2409.         var
  2410.             pb: runTimeParamRec;
  2411.     begin
  2412.         pb.what := 20;
  2413.         CallRuntimeProc(@pb);
  2414.         xColumn := round(pb.retval11);
  2415.     end;
  2416.  
  2417.     function yColumn: longint;
  2418.         var
  2419.             pb: runTimeParamRec;
  2420.     begin
  2421.         pb.what := 21;
  2422.         CallRuntimeProc(@pb);
  2423.         yColumn := round(pb.retval11);
  2424.     end;
  2425.  
  2426.     function xErrColumn: longint;
  2427.         var
  2428.             pb: runTimeParamRec;
  2429.     begin
  2430.         pb.what := 22;
  2431.         CallRuntimeProc(@pb);
  2432.         xErrColumn := round(pb.retval11);
  2433.     end;
  2434.  
  2435.     function yErrColumn: longint;
  2436.         var
  2437.             pb: runTimeParamRec;
  2438.     begin
  2439.         pb.what := 23;
  2440.         CallRuntimeProc(@pb);
  2441.         yErrColumn := round(pb.retval11);
  2442.     end;
  2443.  
  2444.     procedure SetDefaultCols (xColumn, yColumn, xErrColumn, yErrColumn: longint);
  2445.         var
  2446.             pb: runTimeParamRec;
  2447.     begin
  2448.         pb.what := 180;
  2449.         pb.p[3] := @xColumn;
  2450.         pb.p[2] := @yColumn;
  2451.         pb.p[1] := @xErrColumn;
  2452.         pb.p[0] := @yErrColumn;
  2453.         CallRunTimeProc(@pb);
  2454.     end;
  2455.  
  2456.     function GetSelection: rect;
  2457.         var
  2458.             pb: runTimeParamRec;
  2459.     begin
  2460.         pb.what := 24;
  2461.         CallRuntimeProc(@pb);
  2462.         GetSelection := pb.selectionRect;
  2463.     end;
  2464.  
  2465.  
  2466.     function NrRows: longint;
  2467.         var
  2468.             pb: runTimeParamRec;
  2469.     begin
  2470.         pb.what := 34;
  2471.         CallRuntimeProc(@pb);
  2472.         NrRows := round(pb.retval11);
  2473.     end;
  2474.  
  2475.     function NrCols: longint;
  2476.         var
  2477.             pb: runTimeParamRec;
  2478.     begin
  2479.         pb.what := 35;
  2480.         CallRuntimeProc(@pb);
  2481.         NrCols := round(pb.retval11);
  2482.     end;
  2483.  
  2484.  
  2485.  
  2486.     function GetData (Row, Column: longint): extended;
  2487.         var
  2488.             pb: runTimeParamRec;
  2489.     begin
  2490.         pb.column25 := Column;
  2491.         pb.row25 := Row;
  2492.         pb.what := 25;
  2493.         CallRuntimeProc(@pb);
  2494.         GetData := pb.cellValue;
  2495.     end;
  2496.  
  2497.     procedure SetData (Row, Column: longint; ex: extended);
  2498.         var
  2499.             pb: runTimeParamRec;
  2500.     begin
  2501.         pb.column25 := Column;
  2502.         pb.row25 := Row;
  2503.         pb.what := 26;
  2504.         pb.cellValue := ex;
  2505.         CallRuntimeProc(@pb);
  2506.     end;
  2507.  
  2508.  
  2509.     procedure ClearData (Row, Column: longint);
  2510.         var
  2511.             pb: runTimeParamRec;
  2512.     begin
  2513.         pb.column27 := Column;
  2514.         pb.row27 := Row;
  2515.         pb.what := 27;
  2516.         CallRuntimeProc(@pb);
  2517.     end;
  2518.  
  2519.  
  2520.     function TestData (Row, Column: longint): boolean;
  2521.         var
  2522.             pb: runTimeParamRec;
  2523.     begin
  2524.         pb.column28 := Column;
  2525.         pb.row28 := Row;
  2526.         pb.what := 28;
  2527.         CallRuntimeProc(@pb);
  2528.         TestData := pb.retval28;
  2529.     end;
  2530.  
  2531.     function NumberInvalid (aNum: extended): boolean;
  2532.         var
  2533.             pb: runTimeParamRec;
  2534.     begin
  2535.         pb.aNum := aNum;
  2536.         pb.what := 29;
  2537.         CallRuntimeProc(@pb);
  2538.         NumberInvalid := pb.retval29;
  2539.     end;
  2540.  
  2541.     procedure SetParamLimits (paramNum: integer; low, high: extended);
  2542.         var
  2543.             pb: runTimeParamRec;
  2544.     begin
  2545.         pb.what := 30;
  2546.         pb.alow := low;
  2547.         pb.ahigh := high;
  2548.         pb.paramIndex30 := paramNum;
  2549.         CallRuntimeProc(@pb);
  2550.     end;
  2551.  
  2552.     procedure SetParamDefaultValue (paramNum: integer; value: extended);
  2553.         var
  2554.             pb: runTimeParamRec;
  2555.     begin
  2556.         pb.what := 31;
  2557.         pb.aval := value;
  2558.         pb.paramIndex31 := paramNum;
  2559.         CallRuntimeProc(@pb);
  2560.     end;
  2561.  
  2562.     procedure SetParamName (paramNum: integer; s: Str255);
  2563.         var
  2564.             pb: runTimeParamRec;
  2565.     begin
  2566.         pb.what := 32;
  2567.         pb.aname32 := @s;
  2568.         pb.paramIndex32 := paramNum;
  2569.         CallRuntimeProc(@pb);
  2570.     end;
  2571.  
  2572.     procedure SetParamDefaults (paramNum: integer; value: extended; mode: modeType; name: Str255; low, high: extended);
  2573.         var
  2574.             pb: runTimeParamRec;
  2575.     begin
  2576.         pb.what := 33;
  2577.         pb.alow33 := low;
  2578.         pb.ahigh33 := high;
  2579.         pb.aname33 := @name;
  2580.         pb.amode33 := integer(mode);
  2581.         pb.aval33 := value;
  2582.         pb.paramIndex33 := paramNum;
  2583.         CallRuntimeProc(@pb);
  2584.     end;
  2585.  
  2586.     function CallFunction (name: Str255; xvalue: extended): extended;
  2587.         var
  2588.             pb: runTimeParamRec;
  2589.     begin
  2590.         pb.what := 100;
  2591.         pb.funcName100 := @name;
  2592.         pb.xval := xvalue;
  2593.         CallRuntimeProc(@pb);
  2594.         CallFunction := pb.retval100;
  2595.     end;
  2596.  
  2597.     function GetNumFunctionParams (functionName: Str255): integer;
  2598.         var
  2599.             pb: runTimeParamRec;
  2600.     begin
  2601.         pb.what := 105;
  2602.         pb.funcName105 := @functionName;
  2603.         CallRuntimeProc(@pb);
  2604.         GetNumFunctionParams := round(pb.retval105);
  2605.     end;
  2606.  
  2607.     function GetFunctionParamMode (functionName: Str255; paramIndex: integer): modeType;
  2608.         var
  2609.             pb: runTimeParamRec;
  2610.     begin
  2611.         pb.what := 104;
  2612.         pb.funcName101 := @functionName;
  2613.         pb.paramIndex101 := paramIndex;
  2614.         CallRuntimeProc(@pb);
  2615.         GetFunctionParamMode := ModeType(round(pb.retval101));
  2616.     end;
  2617.  
  2618.     procedure GetFunctionParamName(functionName: Str255; paramIndex: integer; var paramName: Str255);
  2619.         var
  2620.             pb: runTimeParamRec;
  2621.     begin
  2622.         pb.what := 106;
  2623.         pb.p[0] := @paramName;
  2624.         pb.p[1] := @paramIndex;
  2625.         pb.p[2] := @functionName;
  2626.         CallRuntimeProc(@pb);
  2627.     end;
  2628.  
  2629.     function GetFunctionParam (functionName: Str255; paramIndex: integer): extended;
  2630.         var
  2631.             pb: runTimeParamRec;
  2632.     begin
  2633.         pb.what := 101;
  2634.         pb.funcName101 := @functionName;
  2635.         pb.paramIndex101 := paramIndex;
  2636.         CallRuntimeProc(@pb);
  2637.         GetFunctionParam := pb.retval101;
  2638.     end;
  2639.  
  2640.     procedure SetFunctionParam (functionName: Str255; paramIndex: integer; value: extended);
  2641.         var
  2642.             pb: runTimeParamRec;
  2643.     begin
  2644.         pb.what := 102;
  2645.         pb.funcName102 := @functionName;
  2646.         pb.paramIndex102 := paramIndex;
  2647.         pb.pVal := value;
  2648.         CallRuntimeProc(@pb);
  2649.     end;
  2650.  
  2651.     procedure CallProgram (name: Str255);
  2652.         var
  2653.             pb: runTimeParamRec;
  2654.     begin
  2655.         pb.what := 103;
  2656.         pb.progName := @name;
  2657.         CallRuntimeProc(@pb);
  2658.     end;
  2659.  
  2660.     function Integral (functionName: Str255; xmin, xmax: extended; numIters: integer): extended;
  2661.         var
  2662.             pb: runTimeParamRec;
  2663.     begin
  2664.         pb.what := 110;
  2665.         pb.funcName110 := @functionName;
  2666.         pb.min := xmin;
  2667.         pb.max := xmax;
  2668.         pb.numIterations := numIters;
  2669.         CallRuntimeProc(@pb);
  2670.         Integral := pb.retval110;
  2671.     end;
  2672.  
  2673.     function Maximum (functionName: Str255; xmin, xmax: extended): extended;
  2674.         var
  2675.             pb: runTimeParamRec;
  2676.     begin
  2677.         pb.what := 111;
  2678.         pb.funcName111 := @functionName;
  2679.         pb.min111 := xmin;
  2680.         pb.max111 := xmax;
  2681.         CallRuntimeProc(@pb);
  2682.         Maximum := pb.retval111;
  2683.     end;
  2684.  
  2685.     function Minimum (functionName: Str255; xmin, xmax: extended): extended;
  2686.         var
  2687.             pb: runTimeParamRec;
  2688.     begin
  2689.         pb.what := 112;
  2690.         pb.funcName111 := @functionName;
  2691.         pb.min111 := xmin;
  2692.         pb.max111 := xmax;
  2693.         CallRuntimeProc(@pb);
  2694.         Minimum := pb.retval111;
  2695.     end;
  2696.  
  2697.     function Root (functionName: Str255; xmin, xmax: extended): extended;
  2698.         var
  2699.             pb: runTimeParamRec;
  2700.     begin
  2701.         pb.what := 113;
  2702.         pb.funcName111 := @functionName;
  2703.         pb.min111 := xmin;
  2704.         pb.max111 := xmax;
  2705.         CallRuntimeProc(@pb);
  2706.         Root := pb.retval111;
  2707.     end;
  2708.  
  2709.     function Derivative (functionName: Str255; x, scale: extended): extended;
  2710.         var
  2711.             pb: runTimeParamRec;
  2712.     begin
  2713.         pb.what := 114;
  2714.         pb.funcName111 := @functionName;
  2715.         pb.min111 := x;
  2716.         pb.max111 := scale;
  2717.         CallRuntimeProc(@pb);
  2718.         Derivative := pb.retval111;
  2719.     end;
  2720.  
  2721.     function Chisquared: extended;
  2722.         var
  2723.             pb: runTimeParamRec;
  2724.     begin
  2725.         pb.what := 120;
  2726.         CallRuntimeProc(@pb);
  2727.         Chisquared := pb.retval11;
  2728.     end;
  2729.  
  2730.     procedure Fit (functionName: Str255; xCol, yCol, errCol: longint; errVal: extended; selectionOnly: Boolean);
  2731.         var
  2732.             pb: runTimeParamRec;
  2733.     begin
  2734.         pb.what := 115;
  2735.         pb.funcName115 := @functionName;
  2736.         pb.xCol := xCol;
  2737.         pb.yCol := yCol;
  2738.         pb.errCol := errCol;
  2739.         pb.errVal := errVal;
  2740.         if selectionOnly then
  2741.             pb.selectionOnly := 1
  2742.         else
  2743.             pb.selectionOnly := 0;
  2744.         CallRuntimeProc(@pb);
  2745.     end;
  2746.  
  2747.     function NumFitParams: integer;
  2748.         var
  2749.             pb: runTimeParamRec;
  2750.     begin
  2751.         pb.what := 121;
  2752.         CallRuntimeProc(@pb);
  2753.         NumFitParams := pb.numFitParams;
  2754.     end;
  2755.  
  2756.     function FittedParams (paramNum: integer): extended;
  2757.         var
  2758.             pb: runTimeParamRec;
  2759.     begin
  2760.         pb.what := 122;
  2761.         pb.paramIndex122 := paramNum;
  2762.         CallRuntimeProc(@pb);
  2763.         FittedParams := pb.retval122;
  2764.     end;
  2765.  
  2766.     function ParamSD (paramNum: integer): extended;
  2767.         var
  2768.             pb: runTimeParamRec;
  2769.     begin
  2770.         pb.what := 123;
  2771.         pb.paramIndex122 := paramNum;
  2772.         CallRuntimeProc(@pb);
  2773.         ParamSD := pb.retval122;
  2774.     end;
  2775.  
  2776.     function CovarMatrix (paramNum1, paramNum2: integer): extended;
  2777.         var
  2778.             pb: runTimeParamRec;
  2779.     begin
  2780.         pb.what := 124;
  2781.         pb.paramIndex1 := paramNum1;
  2782.         pb.paramIndex2 := paramNum2;
  2783.         CallRuntimeProc(@pb);
  2784.         CovarMatrix := pb.retval124;
  2785.     end;
  2786.  
  2787.  
  2788.     function PErf (x: extended): extended;
  2789.         var
  2790.             retval: extended;
  2791.             pb: RunTimeParamRec;
  2792.     begin
  2793.         pb.what := 41;
  2794.         pb.p[0] := @x;
  2795.         pb.p[1] := @retVal;
  2796.         CallRunTimeProc(@pb);
  2797.         PErf := retVal;
  2798.     end;
  2799.  
  2800.     function Erf (x: extended): extended;
  2801.     begin
  2802.         Erf := PErf(x);
  2803.     end;
  2804.  
  2805.     function PErfc (x: extended): extended;
  2806.         var
  2807.             retval: extended;
  2808.             pb: RunTimeParamRec;
  2809.     begin
  2810.         pb.what := 42;
  2811.         pb.p[0] := @x;
  2812.         pb.p[1] := @retVal;
  2813.         CallRunTimeProc(@pb);
  2814.         PErfc := retVal;
  2815.     end;
  2816.  
  2817.     function Erfc (x: extended): extended;
  2818.     begin
  2819.         Erfc := PErfc(x);
  2820.     end;
  2821.  
  2822.     function MarkedX (i: integer): extended;
  2823.         var
  2824.             retval: extended;
  2825.             pb: RunTimeParamRec;
  2826.     begin
  2827.         pb.what := 43;
  2828.         pb.p[0] := @i;
  2829.         pb.p[1] := @retVal;
  2830.         CallRunTimeProc(@pb);
  2831.         MarkedX := retVal;
  2832.     end;
  2833.  
  2834.     function MarkedY (i: integer): extended;
  2835.         var
  2836.             retval: extended;
  2837.             pb: RunTimeParamRec;
  2838.     begin
  2839.         pb.what := 44;
  2840.         pb.p[0] := @i;
  2841.         pb.p[1] := @retVal;
  2842.         CallRunTimeProc(@pb);
  2843.         MarkedY := retVal;
  2844.     end;
  2845.  
  2846.     procedure MarkedCoord (i: integer; var x, y: extended);
  2847.         var
  2848.             pb: RunTimeParamRec;
  2849.     begin
  2850.         pb.what := 45;
  2851.         pb.p[2] := @i;
  2852.         pb.p[1] := @x;
  2853.         pb.p[0] := @y;
  2854.         CallRunTimeProc(@pb);
  2855.     end;
  2856.  
  2857.     procedure SetFitDefaults (algorithm: integer; yErrDistribution: integer; xErrDistribution: integer; xErrColumn: longint; xErrValue: extended; stopTime: extended);
  2858.         var
  2859.             pb: RunTimeParamRec;
  2860.     begin
  2861.         pb.what := 116;
  2862.         pb.p[5] := @algorithm;
  2863.         pb.p[4] := @yErrDistribution;
  2864.         pb.p[3] := @xErrDistribution;
  2865.         pb.p[2] := @xErrColumn;
  2866.         pb.p[1] := @xErrValue;
  2867.         pb.p[0] := @stopTime;
  2868.         CallRunTimeProc(@pb);
  2869.     end;
  2870.  
  2871.     function Maximize (theFunction: Str255; precision: extended; varyX: Boolean; var x, y: extended): Boolean;
  2872.         var
  2873.             retVal: Boolean;
  2874.             pb: RunTimeParamRec;
  2875.     begin
  2876.         pb.what := 117;
  2877.         pb.p[5] := @retVal;
  2878.         pb.p[4] := @theFunction;
  2879.         pb.p[3] := @precision;
  2880.         pb.p[2] := @varyX;
  2881.         pb.p[1] := @x;
  2882.         pb.p[0] := @y;
  2883.         CallRunTimeProc(@pb);
  2884.         Maximize := retVal;
  2885.     end;
  2886.  
  2887.     function Minimize (theFunction: Str255; precision: extended; varyX: Boolean; var x, y: extended): Boolean;
  2888.         var
  2889.             retval: Boolean;
  2890.             pb: RunTimeParamRec;
  2891.     begin
  2892.         pb.what := 118;
  2893.         pb.p[5] := @retVal;
  2894.         pb.p[4] := @theFunction;
  2895.         pb.p[3] := @precision;
  2896.         pb.p[2] := @varyX;
  2897.         pb.p[1] := @x;
  2898.         pb.p[0] := @y;
  2899.         CallRunTimeProc(@pb);
  2900.         Minimize := retVal;
  2901.     end;
  2902.  
  2903.     procedure SetErrorAnalysis (confidence: extended; iterations: longint);
  2904.         var
  2905.             pb: RunTimeParamRec;
  2906.     begin
  2907.         pb.what := 125;
  2908.         pb.p[1] := @confidence;
  2909.         pb.p[0] := @iterations;
  2910.         CallRunTimeProc(@pb);
  2911.     end;
  2912.  
  2913.     procedure ConfidenceInterval (i: integer; var min, max: extended);
  2914.         var
  2915.             pb: RunTimeParamRec;
  2916.     begin
  2917.         pb.what := 126;
  2918.         pb.p[2] := @i;
  2919.         pb.p[1] := @min;
  2920.         pb.p[0] := @max;
  2921.         CallRunTimeProc(@pb);
  2922.     end;
  2923.  
  2924.  
  2925.     function CalcStat (column: longint; selRowsOnly: Boolean; withBasics: Boolean; withSkewAndCurt: Boolean; withMedian: Boolean): Boolean;
  2926.         var
  2927.             retval: boolean;
  2928.             pb: RunTimeParamRec;
  2929.     begin
  2930.         pb.what := 130;
  2931.         pb.p[5] := @retVal;
  2932.         pb.p[4] := @column;
  2933.         pb.p[3] := @selRowsOnly;
  2934.         pb.p[2] := @withBasics;
  2935.         pb.p[1] := @withSkewAndCurt;
  2936.         pb.p[0] := @withMedian;
  2937.         CallRunTimeProc(@pb);
  2938.         CalcStat := retVal;
  2939.     end;
  2940.  
  2941.     procedure GetBasics (var count: longint; var sum, mean, variance, stdDev, meanAbsDev: extended);
  2942.         var
  2943.             pb: RunTimeParamRec;
  2944.     begin
  2945.         pb.what := 131;
  2946.         pb.p[5] := @count;
  2947.         pb.p[4] := @sum;
  2948.         pb.p[3] := @mean;
  2949.         pb.p[2] := @variance;
  2950.         pb.p[1] := @stdDev;
  2951.         pb.p[0] := @meanAbsDev;
  2952.         CallRunTimeProc(@pb);
  2953.     end;
  2954.  
  2955.     procedure GetSkewAndKurt (var count: longint; var mean, variance, skewness, kurtosis: extended);
  2956.         var
  2957.             pb: RunTimeParamRec;
  2958.     begin
  2959.         pb.what := 132;
  2960.         pb.p[4] := @count;
  2961.         pb.p[3] := @mean;
  2962.         pb.p[2] := @variance;
  2963.         pb.p[1] := @skewness;
  2964.         pb.p[0] := @kurtosis;
  2965.         CallRunTimeProc(@pb);
  2966.     end;
  2967.  
  2968.  
  2969.     procedure GetMedian (var count: longint; var mean, median, minimum, maximum: extended);
  2970.         var
  2971.             pb: RunTimeParamRec;
  2972.     begin
  2973.         pb.what := 133;
  2974.         pb.p[4] := @count;
  2975.         pb.p[3] := @mean;
  2976.         pb.p[2] := @median;
  2977.         pb.p[1] := @minimum;
  2978.         pb.p[0] := @maximum;
  2979.         CallRunTimeProc(@pb);
  2980.     end;
  2981.  
  2982.  
  2983.     procedure DoMenu (s: Str255);
  2984.         var
  2985.             pb: RunTimeParamRec;
  2986.     begin
  2987.         pb.what := 135;
  2988.         pb.p[0] := @s;
  2989.         CallRunTimeProc(@pb);
  2990.     end;
  2991.  
  2992.  
  2993.     function GetFrontWindow: longint;
  2994.         var
  2995.             retval: longint;
  2996.             pb: RunTimeParamRec;
  2997.     begin
  2998.         pb.what := 150;
  2999.         pb.p[0] := @retVal;
  3000.         CallRunTimeProc(@pb);
  3001.         GetFrontWindow := retVal;
  3002.     end;
  3003.  
  3004.     procedure DoNewWindow (windowType: OSType);
  3005.         var
  3006.             pb: RunTimeParamRec;
  3007.     begin
  3008.         pb.what := 151;
  3009.         pb.p[0] := @windowType;
  3010.         CallRunTimeProc(@pb);
  3011.     end;
  3012.  
  3013.  
  3014.     procedure SetCurrentWindow (windowID: longint);
  3015.         var
  3016.             pb: RunTimeParamRec;
  3017.     begin
  3018.         pb.what := 152;
  3019.         pb.p[0] := @windowID;
  3020.         CallRunTimeProc(@pb);
  3021.     end;
  3022.  
  3023.     function GetCurrentWindow (windowType: OSType): longint;
  3024.         var
  3025.             retval: longint;
  3026.             pb: RunTimeParamRec;
  3027.     begin
  3028.         pb.what := 153;
  3029.         pb.p[1] := @retVal;
  3030.         pb.p[0] := @windowType;
  3031.         CallRunTimeProc(@pb);
  3032.         GetCurrentWindow := retVal;
  3033.     end;
  3034.  
  3035.     procedure DoCloseWindow (windowID: longint; saveIt: Boolean);
  3036.         var
  3037.             pb: RunTimeParamRec;
  3038.     begin
  3039.         pb.what := 154;
  3040.         pb.p[1] := @windowID;
  3041.         pb.p[0] := @saveIt;
  3042.         CallRunTimeProc(@pb);
  3043.     end;
  3044.  
  3045.     function FrontmostWindow (windowType: OSType): longint;
  3046.         var
  3047.             retval: longint;
  3048.             pb: RunTimeParamRec;
  3049.     begin
  3050.         pb.what := 155;
  3051.         pb.p[1] := @retVal;
  3052.         pb.p[0] := @windowType;
  3053.         CallRunTimeProc(@pb);
  3054.         FrontmostWindow := retVal;
  3055.     end;
  3056.  
  3057.     procedure SaveWindow (windowID: longint);
  3058.         var
  3059.             pb: RunTimeParamRec;
  3060.     begin
  3061.         pb.what := 156;
  3062.         pb.p[0] := @windowID;
  3063.         CallRunTimeProc(@pb);
  3064.     end;
  3065.  
  3066.     procedure SaveWindowAs (windowID: longint; fileName: Str255);
  3067.         var
  3068.             pb: RunTimeParamRec;
  3069.     begin
  3070.         pb.what := 157;
  3071.         pb.p[1] := @windowID;
  3072.         pb.p[0] := @fileName;
  3073.         CallRunTimeProc(@pb);
  3074.     end;
  3075.  
  3076.     function GetWindowID (windowName: Str255): longint;
  3077.         var
  3078.             retval: longint;
  3079.             pb: RunTimeParamRec;
  3080.     begin
  3081.         pb.what := 158;
  3082.         pb.p[1] := @retVal;
  3083.         pb.p[0] := @windowName;
  3084.         CallRunTimeProc(@pb);
  3085.         GetWindowID := retVal;
  3086.     end;
  3087.  
  3088.  
  3089.     function GetWindowType (windowID: longint): OSType;
  3090.         var
  3091.             retval: OSType;
  3092.             pb: RunTimeParamRec;
  3093.     begin
  3094.         pb.what := 159;
  3095.         pb.p[1] := @retVal;
  3096.         pb.p[0] := @windowID;
  3097.         CallRunTimeProc(@pb);
  3098.         GetWindowType := retVal;
  3099.     end;
  3100.  
  3101.     function NextWindow (windowID: longint): longint;
  3102.         var
  3103.             retval: longint;
  3104.             pb: RunTimeParamRec;
  3105.     begin
  3106.         pb.what := 160;
  3107.         pb.p[1] := @retVal;
  3108.         pb.p[0] := @windowID;
  3109.         CallRunTimeProc(@pb);
  3110.         NextWindow := retVal;
  3111.     end;
  3112.  
  3113.     procedure OpenFile (fileName: Str255);
  3114.         var
  3115.             pb: RunTimeParamRec;
  3116.     begin
  3117.         pb.what := 161;
  3118.         pb.p[0] := @fileName;
  3119.         CallRunTimeProc(@pb);
  3120.     end;
  3121.  
  3122.     procedure OpenData (fileName: Str255);
  3123.         var
  3124.             pb: RunTimeParamRec;
  3125.     begin
  3126.         pb.what := 162;
  3127.         pb.p[0] := @fileName;
  3128.         CallRunTimeProc(@pb);
  3129.     end;
  3130.  
  3131.     procedure OpenText (fileName: Str255);
  3132.         var
  3133.             pb: RunTimeParamRec;
  3134.     begin
  3135.         pb.what := 163;
  3136.         pb.p[0] := @fileName;
  3137.         CallRunTimeProc(@pb);
  3138.     end;
  3139.  
  3140.     procedure SetTextFileFormat (colDelimiter, endOfLine: Str255; withColTitles, copyInfoText: Boolean; nrHeaderLines, inputORoutput: longint);
  3141.         var
  3142.             wT, cI: longint;
  3143.             pb: RunTimeParamRec;
  3144.     begin
  3145.         if withColTitles then
  3146.             wT := 1
  3147.         else
  3148.             wT := 0;
  3149.         if copyInfoText then
  3150.             cI := 1
  3151.         else
  3152.             cI := 0;
  3153.         pb.what := 189;
  3154.         pb.p[2] := @colDelimiter;
  3155.         pb.p[1] := @endOfLine;
  3156.         pb.p[0] := @wT;
  3157.         pb.p[0] := @cI;
  3158.         pb.p[0] := @nrHeaderLines;
  3159.         pb.p[0] := @inputORoutput;
  3160.         CallRunTimeProc(@pb);
  3161.     end;
  3162.  
  3163.     procedure SaveDataAsText (windowID: longint; fileName: Str255);
  3164.         var
  3165.             pb: RunTimeParamRec;
  3166.     begin
  3167.         pb.what := 164;
  3168.         pb.p[1] := @windowID;
  3169.         pb.p[0] := @fileName;
  3170.         CallRunTimeProc(@pb);
  3171.     end;
  3172.  
  3173.     procedure SaveDrawingAs (windowID: longint; fileName: Str255; format: longint);
  3174.         var
  3175.             pb: RunTimeParamRec;
  3176.     begin
  3177.         pb.what := 165;
  3178.         pb.p[2] := @windowID;
  3179.         pb.p[1] := @fileName;
  3180.         pb.p[0] := @format;
  3181.         CallRunTimeProc(@pb);
  3182.     end;
  3183.  
  3184.     procedure SetWindowTitle (windowID: longint; name: Str255);
  3185.         var
  3186.             pb: RunTimeParamRec;
  3187.     begin
  3188.         pb.what := 166;
  3189.         pb.p[1] := @windowID;
  3190.         pb.p[0] := @name;
  3191.         CallRunTimeProc(@pb);
  3192.     end;
  3193.  
  3194.     procedure GetWindowTitle (windowID: longint; var name: Str255);
  3195.         var
  3196.             pb: RunTimeParamRec;
  3197.     begin
  3198.         pb.what := 149;
  3199.         pb.p[1] := @windowID;
  3200.         pb.p[0] := @name;
  3201.         CallRunTimeProc(@pb);
  3202.     end;
  3203.  
  3204.  
  3205.     procedure PlaceWindow (windowID: longint; windowRect: Rect);
  3206.         var
  3207.             pb: RunTimeParamRec;
  3208.     begin
  3209.         pb.what := 167;
  3210.         pb.p[4] := @windowID;
  3211.         pb.p[3] := @windowRect.left;
  3212.         pb.p[2] := @windowRect.top;
  3213.         pb.p[1] := @windowRect.right;
  3214.         pb.p[0] := @windowRect.bottom;
  3215.         CallRunTimeProc(@pb);
  3216.     end;
  3217.  
  3218.  
  3219.     procedure BringWindowToFront (windowID: longint);
  3220.         var
  3221.             pb: RunTimeParamRec;
  3222.     begin
  3223.         pb.what := 168;
  3224.         pb.p[0] := @windowID;
  3225.         CallRunTimeProc(@pb);
  3226.     end;
  3227.  
  3228.     procedure Compile (windowID: longint);
  3229.         var
  3230.             pb: RunTimeParamRec;
  3231.     begin
  3232.         pb.what := 169;
  3233.         pb.p[0] := @windowID;
  3234.         CallRunTimeProc(@pb);
  3235.     end;
  3236.  
  3237.     procedure SetDataSize (numberOfRows, numberOfColumns: longint);
  3238.         var
  3239.             pb: RunTimeParamRec;
  3240.     begin
  3241.         pb.what := 170;
  3242.         pb.p[1] := @numberOfRows;
  3243.         pb.p[0] := @numberOfColumns;
  3244.         CallRunTimeProc(@pb);
  3245.     end;
  3246.  
  3247.     function GetColType (columnNumber: longint): longint;
  3248.         var
  3249.             retval: longint;
  3250.             pb: RunTimeParamRec;
  3251.     begin
  3252.         pb.what := 171;
  3253.         pb.p[1] := @retVal;
  3254.         pb.p[0] := @columnNumber;
  3255.         CallRunTimeProc(@pb);
  3256.         GetColType := retVal;
  3257.     end;
  3258.  
  3259.     procedure SetColType (columnNumber: longint; theType: longint);
  3260.         var
  3261.             pb: RunTimeParamRec;
  3262.     begin
  3263.         pb.what := 172;
  3264.         pb.p[1] := @columnNumber;
  3265.         pb.p[0] := @theType;
  3266.         CallRunTimeProc(@pb);
  3267.     end;
  3268.  
  3269.  
  3270.     procedure SetColWidth (columnNumber: longint; width: integer);
  3271.         var
  3272.             pb: RunTimeParamRec;
  3273.     begin
  3274.         pb.what := 184;
  3275.         pb.p[1] := @columnNumber;
  3276.         pb.p[0] := @width;
  3277.         CallRunTimeProc(@pb);
  3278.     end;
  3279.  
  3280.     function ColEmpty (columnNumber: longint): boolean;
  3281.         var
  3282.             retval: boolean;
  3283.             pb: RunTimeParamRec;
  3284.     begin
  3285.         pb.what := 185;
  3286.         pb.p[1] := @retVal;
  3287.         pb.p[0] := @columnNumber;
  3288.         CallRunTimeProc(@pb);
  3289.         ColEmpty := retVal;
  3290.     end;
  3291.  
  3292.     procedure SetBoxTitle(title: Str255);
  3293.         var
  3294.             pb: RunTimeParamRec;
  3295.     begin
  3296.         pb.what := 186;
  3297.         pb.p[0] := @title[0];
  3298.         CallRunTimeProc(@pb);
  3299.     end;
  3300.  
  3301.     procedure SetWindowInfo(windowID:longint; length: longint; info: Ptr);
  3302.         var
  3303.             pb: RunTimeParamRec;
  3304.     begin
  3305.         pb.what := 187;
  3306.         pb.p[2] := @windowID;
  3307.         pb.p[1] := @length;
  3308.         pb.p[0] := info;
  3309.         CallRunTimeProc(@pb);
  3310.     end;
  3311.  
  3312.     procedure SelectCells (left, top, right, bottom: longint);
  3313.         var
  3314.             pb: RunTimeParamRec;
  3315.     begin
  3316.         pb.what := 173;
  3317.         pb.p[3] := @left;
  3318.         pb.p[2] := @top;
  3319.         pb.p[1] := @right;
  3320.         pb.p[0] := @bottom;
  3321.         CallRunTimeProc(@pb);
  3322.     end;
  3323.  
  3324.  
  3325.     procedure SelectRows (top, bottom: longint; doSelect: Boolean);
  3326.         var
  3327.             pb: RunTimeParamRec;
  3328.     begin
  3329.         pb.what := 174;
  3330.         pb.p[2] := @top;
  3331.         pb.p[1] := @bottom;
  3332.         pb.p[0] := @doSelect;
  3333.         CallRunTimeProc(@pb);
  3334.     end;
  3335.  
  3336.  
  3337.     function RowSelected (rowNumber: longint): boolean;
  3338.         var
  3339.             retval: boolean;
  3340.             pb: RunTimeParamRec;
  3341.     begin
  3342.         pb.what := 175;
  3343.         pb.p[1] := @retVal;
  3344.         pb.p[0] := @rowNumber;
  3345.         CallRunTimeProc(@pb);
  3346.         RowSelected := retVal;
  3347.     end;
  3348.  
  3349.     function CellSelected (row, column: longint): Boolean;
  3350.         var
  3351.             retval: boolean;
  3352.             pb: RunTimeParamRec;
  3353.     begin
  3354.         pb.what := 176;
  3355.         pb.p[2] := @retVal;
  3356.         pb.p[1] := @row;
  3357.         pb.p[0] := @column;
  3358.         CallRunTimeProc(@pb);
  3359.         CellSelected := retVal;
  3360.     end;
  3361.  
  3362.  
  3363.     procedure SetCell (row, column: longint; s: Str255);
  3364.         var
  3365.             pb: RunTimeParamRec;
  3366.     begin
  3367.         pb.what := 177;
  3368.         pb.p[2] := @row;
  3369.         pb.p[1] := @column;
  3370.         pb.p[0] := @s;
  3371.         CallRunTimeProc(@pb);
  3372.     end;
  3373.  
  3374.     procedure GetCell (var s: Str255; row, column: longint);
  3375.         var
  3376.             pb: RunTimeParamRec;
  3377.     begin
  3378.         pb.what := 178;
  3379.         pb.p[2] := @row;
  3380.         pb.p[1] := @column;
  3381.         pb.p[0] := @s;
  3382.         CallRunTimeProc(@pb);
  3383.     end;
  3384.  
  3385.     procedure GetColName (var name: Str255; column: longint);
  3386.         var
  3387.             pb: RunTimeParamRec;
  3388.     begin
  3389.         pb.what := 179;
  3390.         pb.p[0] := @name;
  3391.         pb.p[1] := @column;
  3392.         CallRunTimeProc(@pb);
  3393.     end;
  3394.  
  3395.     procedure GetColHandle (col: longint; var colH: Handle; var length: longint; var colType: longint; forWriting: Boolean);
  3396.         var
  3397.             pb: RunTimeParamRec;
  3398.     begin
  3399.         pb.what := 181;
  3400.         pb.p[0] := @col;
  3401.         pb.p[1] := @colH;
  3402.         pb.p[2] := @length;
  3403.         pb.p[3] := @colType;
  3404.         pb.p[4] := @forWriting;
  3405.         CallRunTimeProc(@pb);
  3406.     end;
  3407.  
  3408.     procedure SetColHandle (col: longint; colH: Handle);
  3409.         var
  3410.             pb: RunTimeParamRec;
  3411.     begin
  3412.         pb.what := 182;
  3413.         pb.p[0] := @col;
  3414.         pb.p[1] := @colH;
  3415.         CallRunTimeProc(@pb);
  3416.     end;
  3417.  
  3418.     procedure GetDefaultData (xColH, yColH, xErrColH, yErrColH: ExtendedArrayHandlePtr; indecesH: LongArrayHandlePtr; var arraySize: longint; selectedRowsOnly: Boolean; info: DataInfoPtr);
  3419.         var
  3420.             pb: RunTimeParamRec;
  3421.     begin
  3422.         pb.what := 183;
  3423.         pb.p[7] := Ptr(xColH);
  3424.         pb.p[6] := Ptr(yColH);
  3425.         pb.p[5] := Ptr(xErrColH);
  3426.         pb.p[4] := Ptr(yErrColH);
  3427.         pb.p[3] := Ptr(indecesH);
  3428.         pb.p[2] := @arraySize;
  3429.         pb.p[1] := @selectedRowsOnly;
  3430.         pb.p[0] := Ptr(info);
  3431.         CallRunTimeProc(@pb);
  3432.     end;
  3433.  
  3434.     procedure SetWaitTitle (s: Str255);
  3435.         var
  3436.             pb: RunTimeParamRec;
  3437.     begin
  3438.         pb.what := 46;
  3439.         pb.p[0] := @s;
  3440.         CallRunTimeProc(@pb);
  3441.     end;
  3442.  
  3443.     procedure SetWaitText (s1, s2, s3, s4, s5, s6: Str255);
  3444.         var
  3445.             pb: RunTimeParamRec;
  3446.     begin
  3447.         pb.what := 47;
  3448.         pb.p[5] := @s1;
  3449.         pb.p[4] := @s2;
  3450.         pb.p[3] := @s3;
  3451.         pb.p[2] := @s4;
  3452.         pb.p[1] := @s5;
  3453.         pb.p[0] := @s6;
  3454.         CallRunTimeProc(@pb);
  3455.     end;
  3456.  
  3457.  
  3458.     function CreateTextFile (fileName: Str255): longint;
  3459.         var
  3460.             retval: longint;
  3461.             pb: RunTimeParamRec;
  3462.     begin
  3463.         pb.what := 190;
  3464.         pb.p[1] := @retVal;
  3465.         pb.p[0] := @fileName;
  3466.         CallRunTimeProc(@pb);
  3467.         CreateTextFile := retVal;
  3468.     end;
  3469.  
  3470.     procedure CloseTextFile (fileRefNumber: longint);
  3471.         var
  3472.             pb: RunTimeParamRec;
  3473.     begin
  3474.         pb.what := 191;
  3475.         pb.p[0] := @fileRefNumber;
  3476.         CallRunTimeProc(@pb);
  3477.     end;
  3478.  
  3479.     procedure WriteToTextFile (fileRefNumber: longint);
  3480.         var
  3481.             pb: RunTimeParamRec;
  3482.     begin
  3483.         pb.what := 192;
  3484.         pb.p[0] := @fileRefNumber;
  3485.         CallRunTimeProc(@pb);
  3486.     end;
  3487.  
  3488.  
  3489.     procedure HandleEvent (var theEvent: EventRecord);
  3490.         var
  3491.             pb: RunTimeParamRec;
  3492.     begin
  3493.         pb.what := 193;
  3494.         pb.p[0] := @theEvent;
  3495.         CallRunTimeProc(@pb);
  3496.     end;
  3497.  
  3498.     function CancelEvent (var theEvent: EventRecord):Boolean;
  3499.         var
  3500.             pb: RunTimeParamRec;
  3501.             retval: Boolean;
  3502.     begin
  3503.         pb.what := 196;
  3504.         pb.p[0] := @theEvent;
  3505.         pb.p[1] := @retval;
  3506.         CallRunTimeProc(@pb);
  3507.         CancelEvent := retval;
  3508.     end;
  3509.  
  3510.     procedure DeactivateProFitWindows;
  3511.         var
  3512.             pb: RunTimeParamRec;
  3513.     begin
  3514.         pb.what := 194;
  3515.         CallRunTimeProc(@pb);
  3516.     end;
  3517.  
  3518.     procedure ActivateProFitWindows;
  3519.         var
  3520.             pb: RunTimeParamRec;
  3521.     begin
  3522.         pb.what := 195;
  3523.         CallRunTimeProc(@pb);
  3524.     end;
  3525.  
  3526.     function GetModuleFile: FSSpecPtr;
  3527.         var
  3528.             modulesParams: ExtModulesParamBlockPtr;
  3529.     begin
  3530.         modulesParams := GetPb;
  3531.         GetModuleFile := @modulesParams^.moduleFile;
  3532.     end;
  3533.  
  3534.  
  3535.     procedure OpenCurve (curveName: Str255);
  3536.         var
  3537.             pb: RunTimeParamRec;
  3538.     begin
  3539.         pb.what := 224;
  3540.         pb.p[0] := @curveName;
  3541.         CallRunTimeProc(@pb);
  3542.     end;
  3543.  
  3544.     procedure CloseCurve;
  3545.         var
  3546.             pb: RunTimeParamRec;
  3547.     begin
  3548.         pb.what := 216;
  3549.         CallRunTimeProc(@pb);
  3550.     end;
  3551.  
  3552.     procedure OpenDataSet (errors: integer; connected: Boolean; datasetName: Str255);
  3553.         var
  3554.             pb: RunTimeParamRec;
  3555.     begin
  3556.         pb.what := 225;
  3557.         pb.p[2] := @errors;
  3558.         pb.p[1] := @connected;
  3559.         pb.p[0] := @datasetName;
  3560.         CallRunTimeProc(@pb);
  3561.     end;
  3562.  
  3563.     procedure CloseDataSet;
  3564.         var
  3565.             pb: RunTimeParamRec;
  3566.     begin
  3567.         pb.what := 217;
  3568.         CallRunTimeProc(@pb);
  3569.     end;
  3570.  
  3571.     procedure SetCurveFill (whichAxis: integer; axisID: integer);
  3572.         var
  3573.             pb: RunTimeParamRec;
  3574.     begin
  3575.         pb.what := 248;
  3576.         pb.p[1] := @whichAxis;
  3577.         pb.p[0] := @axisID;
  3578.         CallRunTimeProc(@pb);
  3579.     end;
  3580.  
  3581.     procedure SetEBarStyle (caplength, capThick, lineThick: extended);
  3582.         var
  3583.             pb: RunTimeParamRec;
  3584.     begin
  3585.         pb.what := 249;
  3586.         pb.p[2] := @caplength;
  3587.         pb.p[1] := @capThick;
  3588.         pb.p[0] := @lineThick;
  3589.         CallRunTimeProc(@pb);
  3590.     end;
  3591.  
  3592.     procedure AddDataPoint (x, y, xErr, yErr, xErr1, yErr1: extended);
  3593.         var
  3594.             pb: RunTimeParamRec;
  3595.     begin
  3596.         pb.what := 250;
  3597.         pb.p[5] := @x;
  3598.         pb.p[4] := @y;
  3599.         pb.p[3] := @xErr;
  3600.         pb.p[2] := @yErr;
  3601.         pb.p[1] := @xErr1;
  3602.         pb.p[0] := @yErr1;
  3603.         CallRunTimeProc(@pb);
  3604.     end;
  3605.  
  3606.  
  3607.  
  3608.     procedure SetLineStyle (thick: extended; dash: integer);
  3609.         var
  3610.             pb: RunTimeParamRec;
  3611.     begin
  3612.         pb.what := 200;
  3613.         pb.p[1] := @thick;
  3614.         pb.p[0] := @dash;
  3615.         CallRunTimeProc(@pb);
  3616.     end;
  3617.  
  3618.     procedure SetFillPattern (pattern: integer);
  3619.         var
  3620.             pb: RunTimeParamRec;
  3621.     begin
  3622.         pb.what := 201;
  3623.         pb.p[0] := @pattern;
  3624.         CallRunTimeProc(@pb);
  3625.     end;
  3626.  
  3627.     procedure SetArrowStyle (arrowLocation: integer; style: integer; size: extended);
  3628.         var
  3629.             pb: RunTimeParamRec;
  3630.     begin
  3631.         pb.what := 202;
  3632.         pb.p[2] := @arrowLocation;
  3633.         pb.p[1] := @style;
  3634.         pb.p[0] := @size;
  3635.         CallRunTimeProc(@pb);
  3636.     end;
  3637.  
  3638.     procedure SetTextStyle (fontName: Str255; size: extended; style: integer);
  3639.         var
  3640.             pb: RunTimeParamRec;
  3641.     begin
  3642.         pb.what := 203;
  3643.         pb.p[2] := @fontName;
  3644.         pb.p[1] := @size;
  3645.         pb.p[0] := @style;
  3646.         CallRunTimeProc(@pb);
  3647.     end;
  3648.  
  3649.     procedure SetNewGraphRect (left, top, right, bottom: extended);
  3650.         var
  3651.             pb: RunTimeParamRec;
  3652.     begin
  3653.         pb.what := 218;
  3654.         pb.p[3] := @left;
  3655.         pb.p[2] := @top;
  3656.         pb.p[1] := @right;
  3657.         pb.p[0] := @bottom;
  3658.         CallRunTimeProc(@pb);
  3659.     end;
  3660.  
  3661.     procedure SetDataPointStyle (style: integer; size: extended; thickness: extended);
  3662.         var
  3663.             pb: RunTimeParamRec;
  3664.     begin
  3665.         pb.what := 204;
  3666.         pb.p[2] := @style;
  3667.         pb.p[1] := @size;
  3668.         pb.p[0] := @thickness;
  3669.         CallRunTimeProc(@pb);
  3670.     end;
  3671.  
  3672.     procedure SetBGDataPointStyle (style: integer; size: extended);
  3673.         var
  3674.             pb: RunTimeParamRec;
  3675.     begin
  3676.         pb.what := 205;
  3677.         pb.p[1] := @style;
  3678.         pb.p[0] := @size;
  3679.         CallRunTimeProc(@pb);
  3680.     end;
  3681.  
  3682.     procedure SetLineColor (red, green, blue: longint);
  3683.         var
  3684.             pb: RunTimeParamRec;
  3685.     begin
  3686.         pb.what := 206;
  3687.         pb.p[2] := @red;
  3688.         pb.p[1] := @green;
  3689.         pb.p[0] := @blue;
  3690.         CallRunTimeProc(@pb);
  3691.     end;
  3692.  
  3693.     procedure SetFillColor (red, green, blue: longint);
  3694.         var
  3695.             pb: RunTimeParamRec;
  3696.     begin
  3697.         pb.what := 207;
  3698.         pb.p[2] := @red;
  3699.         pb.p[1] := @green;
  3700.         pb.p[0] := @blue;
  3701.         CallRunTimeProc(@pb);
  3702.     end;
  3703.  
  3704.     procedure DrawRect (left, top, right, bottom: extended);
  3705.         var
  3706.             pb: RunTimeParamRec;
  3707.     begin
  3708.         pb.what := 208;
  3709.         pb.p[3] := @left;
  3710.         pb.p[2] := @top;
  3711.         pb.p[1] := @right;
  3712.         pb.p[0] := @bottom;
  3713.         CallRunTimeProc(@pb);
  3714.     end;
  3715.  
  3716.     procedure DrawEllipse (left, top, right, bottom: extended);
  3717.         var
  3718.             pb: RunTimeParamRec;
  3719.     begin
  3720.         pb.what := 209;
  3721.         pb.p[3] := @left;
  3722.         pb.p[2] := @top;
  3723.         pb.p[1] := @right;
  3724.         pb.p[0] := @bottom;
  3725.         CallRunTimeProc(@pb);
  3726.     end;
  3727.  
  3728.     procedure DrawLine (start_h, start_v, end_h, end_v: extended);
  3729.         var
  3730.             pb: RunTimeParamRec;
  3731.     begin
  3732.         pb.what := 210;
  3733.         pb.p[3] := @start_h;
  3734.         pb.p[2] := @start_v;
  3735.         pb.p[1] := @end_h;
  3736.         pb.p[0] := @end_v;
  3737.         CallRunTimeProc(@pb);
  3738.     end;
  3739.  
  3740.     procedure DrawTextLine (theString: Str255; theAngle: extended; docenter: Boolean);
  3741.         var
  3742.             pb: RunTimeParamRec;
  3743.     begin
  3744.         pb.what := 211;
  3745.         pb.p[2] := @theString;
  3746.         pb.p[1] := @theAngle;
  3747.         pb.p[0] := @docenter;
  3748.         CallRunTimeProc(@pb);
  3749.     end;
  3750.  
  3751.  
  3752.     procedure DrawNumber (theNum: extended; decs: integer; theAngle: extended; docenter: Boolean);
  3753.         var
  3754.             pb: RunTimeParamRec;
  3755.     begin
  3756.         pb.what := 212;
  3757.         pb.p[3] := @theNum;
  3758.         pb.p[2] := @decs;
  3759.         pb.p[1] := @theAngle;
  3760.         pb.p[0] := @docenter;
  3761.         CallRunTimeProc(@pb);
  3762.     end;
  3763.  
  3764.     procedure DrawDataPoint (x, y: extended);
  3765.         var
  3766.             pb: RunTimeParamRec;
  3767.     begin
  3768.         pb.what := 213;
  3769.         pb.p[1] := @x;
  3770.         pb.p[0] := @y;
  3771.         CallRunTimeProc(@pb);
  3772.     end;
  3773.  
  3774.     procedure DrawPICT (left, top, right, bottom: extended; thePict: PicHandle);
  3775.         var
  3776.             pb: RunTimeParamRec;
  3777.     begin
  3778.         pb.what := 247;
  3779.         pb.p[4] := @left;
  3780.         pb.p[3] := @top;
  3781.         pb.p[2] := @right;
  3782.         pb.p[1] := @bottom;
  3783.         pb.p[0] := Ptr(thePict);
  3784.         CallRunTimeProc(@pb);
  3785.     end;
  3786.  
  3787.     procedure GetLastClickedCoordinates (var x, y: extended);
  3788.         var
  3789.             pb: RunTimeParamRec;
  3790.     begin
  3791.         pb.what := 223;
  3792.         pb.p[1] := @x;
  3793.         pb.p[0] := @y;
  3794.         CallRunTimeProc(@pb);
  3795.     end;
  3796.  
  3797.     procedure DisableDrawingUpdates;
  3798.         var
  3799.             pb: RunTimeParamRec;
  3800.     begin
  3801.         pb.what := 226;
  3802.         CallRunTimeProc(@pb);
  3803.     end;
  3804.  
  3805.     procedure OpenPolygon (smoothing: integer; kind: integer);
  3806.         var
  3807.             pb: RunTimeParamRec;
  3808.     begin
  3809.         pb.what := 214;
  3810.         pb.p[1] := @smoothing;
  3811.         pb.p[0] := @kind;
  3812.         CallRunTimeProc(@pb);
  3813.     end;
  3814.  
  3815.     procedure ClosePolygon;
  3816.         var
  3817.             pb: RunTimeParamRec;
  3818.     begin
  3819.         pb.what := 215;
  3820.         CallRunTimeProc(@pb);
  3821.     end;
  3822.  
  3823.  
  3824.     procedure GroupBegin;
  3825.         var
  3826.             pb: RunTimeParamRec;
  3827.     begin
  3828.         pb.what := 219;
  3829.         CallRunTimeProc(@pb);
  3830.     end;
  3831.  
  3832.     procedure GroupEnd;
  3833.         var
  3834.             pb: RunTimeParamRec;
  3835.     begin
  3836.         pb.what := 220;
  3837.         CallRunTimeProc(@pb);
  3838.     end;
  3839.  
  3840.  
  3841.     procedure SetCurrentGraph (graphID: longint);
  3842.         var
  3843.             pb: RunTimeParamRec;
  3844.     begin
  3845.         pb.what := 227;
  3846.         pb.p[0] := @graphID;
  3847.         CallRunTimeProc(@pb);
  3848.     end;
  3849.  
  3850.     function GetCurrentGraph: longint;
  3851.         var
  3852.             retval: longint;
  3853.             pb: RunTimeParamRec;
  3854.     begin
  3855.         pb.what := 229;
  3856.         pb.p[0] := @retval;
  3857.         CallRunTimeProc(@pb);
  3858.         GetCurrentGraph := retval;
  3859.     end;
  3860.  
  3861.     function GetNextGraph (graphID: longint): longint;
  3862.         var
  3863.             retval: longint;
  3864.             pb: RunTimeParamRec;
  3865.     begin
  3866.         pb.what := 228;
  3867.         pb.p[1] := @retval;
  3868.         pb.p[0] := @graphID;
  3869.         CallRunTimeProc(@pb);
  3870.         GetNextGraph := retval;
  3871.     end;
  3872.  
  3873.     procedure GetGraphFrame (var left, top, right, bottom: extended);
  3874.         var
  3875.             pb: RunTimeParamRec;
  3876.     begin
  3877.         pb.what := 230;
  3878.         pb.p[3] := @left;
  3879.         pb.p[2] := @top;
  3880.         pb.p[1] := @right;
  3881.         pb.p[0] := @bottom;
  3882.         CallRunTimeProc(@pb);
  3883.     end;
  3884.  
  3885.     procedure SetGraphFrame (left, top, right, bottom: extended);
  3886.         var
  3887.             pb: RunTimeParamRec;
  3888.     begin
  3889.         pb.what := 231;
  3890.         pb.p[3] := @left;
  3891.         pb.p[2] := @top;
  3892.         pb.p[1] := @right;
  3893.         pb.p[0] := @bottom;
  3894.         CallRunTimeProc(@pb);
  3895.     end;
  3896.  
  3897.     function GetCurrentAxis (whichAxis: integer): integer;
  3898.         var
  3899.             retval: integer;
  3900.             pb: RunTimeParamRec;
  3901.     begin
  3902.         pb.what := 232;
  3903.         pb.p[1] := @retval;
  3904.         pb.p[0] := @whichAxis;
  3905.         CallRunTimeProc(@pb);
  3906.         GetCurrentAxis := retval;
  3907.     end;
  3908.  
  3909.     procedure SetCurrentAxis (whichAxis: integer; axisID: integer);
  3910.         var
  3911.             pb: RunTimeParamRec;
  3912.     begin
  3913.         pb.what := 233;
  3914.         pb.p[1] := @whichAxis;
  3915.         pb.p[0] := @axisID;
  3916.         CallRunTimeProc(@pb);
  3917.     end;
  3918.  
  3919.     procedure DeleteAxis (whichAxis: integer; axisID: integer);
  3920.         var
  3921.             pb: RunTimeParamRec;
  3922.     begin
  3923.         pb.what := 234;
  3924.         pb.p[1] := @whichAxis;
  3925.         pb.p[0] := @axisID;
  3926.         CallRunTimeProc(@pb);
  3927.     end;
  3928.  
  3929.     procedure MakeNewAxis (whichAxis: integer; min, max: extended; scaling: integer; position: extended);
  3930.         var
  3931.             pb: RunTimeParamRec;
  3932.     begin
  3933.         pb.what := 235;
  3934.         pb.p[4] := @whichAxis;
  3935.         pb.p[3] := @min;
  3936.         pb.p[2] := @max;
  3937.         pb.p[1] := @scaling;
  3938.         pb.p[0] := @position;
  3939.         CallRunTimeProc(@pb);
  3940.     end;
  3941.  
  3942.     procedure SetRange (whichAxis: integer; min, max: extended; scaling: integer);
  3943.         var
  3944.             pb: RunTimeParamRec;
  3945.     begin
  3946.         pb.what := 236;
  3947.         pb.p[3] := @whichAxis;
  3948.         pb.p[2] := @min;
  3949.         pb.p[1] := @max;
  3950.         pb.p[0] := @scaling;
  3951.         CallRunTimeProc(@pb);
  3952.     end;
  3953.  
  3954.     procedure MakeTicks (whichAxis: integer; firstMaj, distance: extended; nrMinTicks: integer);
  3955.         var
  3956.             pb: RunTimeParamRec;
  3957.     begin
  3958.         pb.what := 237;
  3959.         pb.p[3] := @whichAxis;
  3960.         pb.p[2] := @firstMaj;
  3961.         pb.p[1] := @distance;
  3962.         pb.p[0] := @nrMinTicks;
  3963.         CallRunTimeProc(@pb);
  3964.     end;
  3965.  
  3966.     procedure SetLabelsFormat (whichAxis: integer; format: integer; decimals: integer);
  3967.         var
  3968.             pb: RunTimeParamRec;
  3969.     begin
  3970.         pb.what := 238;
  3971.         pb.p[2] := @whichAxis;
  3972.         pb.p[1] := @format;
  3973.         pb.p[0] := @decimals;
  3974.         CallRunTimeProc(@pb);
  3975.     end;
  3976.  
  3977.     procedure ClearLabels (whichAxis: integer);
  3978.         var
  3979.             pb: RunTimeParamRec;
  3980.     begin
  3981.         pb.what := 240;
  3982.         pb.p[0] := @whichAxis;
  3983.         CallRunTimeProc(@pb);
  3984.     end;
  3985.  
  3986.     procedure ClearTicks (whichAxis: integer);
  3987.         var
  3988.             pb: RunTimeParamRec;
  3989.     begin
  3990.         pb.what := 239;
  3991.         pb.p[0] := @whichAxis;
  3992.         CallRunTimeProc(@pb);
  3993.     end;
  3994.  
  3995.     function AddTick (whichAxis: integer; tickPos: extended; isMajor: Boolean): integer;
  3996.         var
  3997.             retval: integer;
  3998.             pb: RunTimeParamRec;
  3999.     begin
  4000.         pb.what := 241;
  4001.         pb.p[3] := @retval;
  4002.         pb.p[2] := @whichAxis;
  4003.         pb.p[1] := @tickPos;
  4004.         pb.p[0] := @isMajor;
  4005.         CallRunTimeProc(@pb);
  4006.         AddTick := retval;
  4007.     end;
  4008.  
  4009.     procedure SetLabel (whichAxis: integer; tickNum: integer; labelNumber: extended);
  4010.         var
  4011.             pb: RunTimeParamRec;
  4012.     begin
  4013.         pb.what := 242;
  4014.         pb.p[2] := @whichAxis;
  4015.         pb.p[1] := @tickNum;
  4016.         pb.p[0] := @labelNumber;
  4017.         CallRunTimeProc(@pb);
  4018.     end;
  4019.  
  4020.     procedure SetLabelText (whichAxis: integer; tickNum: integer; labelText: Str255);
  4021.         var
  4022.             pb: RunTimeParamRec;
  4023.     begin
  4024.         pb.what := 243;
  4025.         pb.p[2] := @whichAxis;
  4026.         pb.p[1] := @tickNum;
  4027.         pb.p[0] := @labelText;
  4028.         CallRunTimeProc(@pb);
  4029.     end;
  4030.  
  4031.     procedure SetAxisPosition (whichAxis: integer; position: extended);
  4032.         var
  4033.             pb: RunTimeParamRec;
  4034.     begin
  4035.         pb.what := 244;
  4036.         pb.p[1] := @whichAxis;
  4037.         pb.p[0] := @position;
  4038.         CallRunTimeProc(@pb);
  4039.     end;
  4040.  
  4041.     procedure SetAxisAttributes (whichAxis: integer; flags: longint);
  4042.         var
  4043.             pb: RunTimeParamRec;
  4044.     begin
  4045.         pb.what := 245;
  4046.         pb.p[1] := @whichAxis;
  4047.         pb.p[0] := @flags;
  4048.         CallRunTimeProc(@pb);
  4049.     end;
  4050.  
  4051.     procedure SetGraphAttributes (flags: longint);
  4052.         var
  4053.             pb: RunTimeParamRec;
  4054.     begin
  4055.         pb.what := 246;
  4056.         pb.p[0] := @flags;
  4057.         CallRunTimeProc(@pb);
  4058.     end;
  4059.  
  4060.  
  4061. { The following routines are provided for converting 8 byte floating point values into extended values }
  4062. { They are only required for compilers that do not support intermixing of 8 byte and 10/12 byte }
  4063. { doubles, such as MW Pascal for 68k. The routines are not needed on a PowerMac (where }
  4064. { extended variables are always 8 bytes) or on the Think Pascal compiler (which automatically }
  4065. { converts between double_8 and extended. For compatibility purposes, the following routines }
  4066. { are, however, provided for all compilers }
  4067.  
  4068.  
  4069.  
  4070.     function Dbl8ToExt (x: double_8): extended;
  4071.     { converts the double_8 value x into an extended (10 byte) value }
  4072.  
  4073. {$IFC COMPILER_KNOWS_DOUBLE_8}
  4074.     begin                { if the compiler automatically converts between double_8 and extended }
  4075.         Dbl8ToExt := x;    { then there's nothing to do for us }
  4076.     end;
  4077. {$ELSEC}
  4078.  
  4079.  
  4080.     {$IFC EXT_SIZE=12}
  4081.     { if extended is 12 bytes }
  4082.     procedure Convert_8_12 (d8: double_8; var x: extended);
  4083.     inline
  4084.         $206F, $0004,        { MOVEA.L   $0004(A7),A0 }
  4085.         $F210, $5400,        { FMOVE.D   (A0),FP0 }
  4086.         $2057,                { MOVEA.L   (A7),A0 }
  4087.         $F210, $6800,        { FMOVE.X   FP0,(A0) }
  4088.         $4FEF, $0008;        { LEA       $0008(A7),A7 }
  4089.     var
  4090.         result: extended;
  4091. begin
  4092.     Convert_8_12(x, result);
  4093.     Dbl8ToExt := result;
  4094. end;
  4095.     {$ELSEC}
  4096.     { if extended is 10 bytes }
  4097.  
  4098.     procedure Convert_8_10 (d8: double_8; var x: extended);
  4099.     inline
  4100.         $3F3C, $080E,    { MOVE.W    #$08OE,-(A7) }
  4101.         $A9EB;            { _FP68K, call SANE for the conversion }
  4102.     var
  4103.         result: extended;
  4104. begin
  4105.     Convert_8_10(x, result);
  4106.     Dbl8ToExt := result;
  4107. end;
  4108.     {$ENDC}
  4109. {$ENDC}
  4110.  
  4111.  
  4112. function ExtToDbl8 (x: extended): double_8;
  4113.     { converts the double_8 value x into an extended (10 byte) value }
  4114.  
  4115. {$IFC COMPILER_KNOWS_DOUBLE_8}
  4116. begin                { if the compiler automatically converts between double_8 and extended }
  4117.     ExtToDbl8 := x;    { then there's nothing to do for us }
  4118. end;
  4119. {$ELSEC}
  4120.  
  4121.  
  4122.     {$IFC EXT_SIZE=12}
  4123.     { if extended is 12 bytes }
  4124.  
  4125. procedure Convert_12_8 (x: extended; var d8: double_8);
  4126.     { converts the extended (12 byte) value x into a double_8 (8 byte) value }
  4127. inline
  4128.         $206F, $0004,        { MOVEA.L   $0004(A7),A0 }
  4129.         $F210, $4800,        { FMOVE.X   (A0),FP0 }
  4130.         $2057,                { MOVEA.L   (A7),A0 }
  4131.         $F210, $7400,        { FMOVE.D   FP0,(A0) }
  4132.         $4FEF, $0008;        { LEA       $0008(A7),A7 }
  4133. var
  4134.     result: double_8;
  4135. begin
  4136.     Convert_12_8(x, result);
  4137.     ExtToDbl8 := result;
  4138. end;
  4139.  
  4140.     {$ELSEC}
  4141.     { if extended is 10 bytes }
  4142.  
  4143. procedure Convert_10_8 (x: extended; var d8: double_8);
  4144.     { converts the extended (10 byte) value x into a double_8 (8 byte) value }
  4145. inline
  4146.     $3F3C, $0810,    { MOVE.W    #$0810,-(A7) }
  4147.     $A9EB;            { _FP68K, call SANE for the conversion }
  4148. var
  4149.     result: double_8;
  4150. begin
  4151.     Convert_10_8(x, result);
  4152.     ExtToDbl8 := result;
  4153. end;
  4154.     {$ENDC}
  4155. {$ENDC}
  4156.  
  4157. end.
  4158.